home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr35 / pplami.zip / PPL.SAM < prev   
INI File  |  1993-06-04  |  470KB  |  12,558 lines

  1. [ver]
  2.     4
  3. [sty]
  4.     _cdcman.sty
  5. [files]
  6. [charset]
  7.     82
  8.     ANSI (Windows, IBM CP 1252)
  9. [revisions]
  10.     0
  11. [prn]
  12.     IBM LaserPrinter 4029 PS17
  13. [port]
  14.     LPT3:
  15. [lang]
  16.     1
  17. [desc]
  18.     Main PPL Documentation
  19.     
  20.     
  21.     
  22.     
  23.     739228361
  24.     78
  25.     733105982
  26.     7535
  27.     311
  28.     1643
  29.     10190
  30.     20
  31.     20
  32.     
  33.     
  34.     
  35.     
  36.     
  37.     
  38.     1
  39. [fopts]
  40.     0
  41.     1
  42.     0
  43.     0
  44. [lnopts]
  45.     2
  46.     Body Text
  47.     1
  48. [docopts]
  49.     5
  50.     2
  51. [GramStyle]
  52.     
  53. [ParaNum]
  54.     1
  55. [tag]
  56.     Body Text
  57.     2
  58.     [fnt]
  59.         TimesNewRomanPS
  60.         200
  61.         0
  62.         49152
  63.     [algn]
  64.         8
  65.         1
  66.         1656
  67.         0
  68.         0
  69.     [spc]
  70.         33
  71.         273
  72.         1
  73.         0
  74.         0
  75.         1
  76.         100
  77.     [brk]
  78.         4
  79.     [line]
  80.         8
  81.         0
  82.         1
  83.         0
  84.         1
  85.         1
  86.         1
  87.         10
  88.         10
  89.         1
  90.     [spec]
  91.         0
  92.         0
  93.         
  94.         0
  95.         1
  96.         1
  97.         0
  98.         0
  99.         0
  100.         0
  101.     [nfmt]
  102.         280
  103.         1
  104.         2
  105.         .
  106.         ,
  107.         $
  108.     Body Text
  109.     0
  110.     0
  111. [tag]
  112.     Indent_List
  113.     3
  114.     [fnt]
  115.         TimesNewRomanPS
  116.         200
  117.         0
  118.         49152
  119.     [algn]
  120.         8
  121.         1
  122.         1656
  123.         0
  124.         1584
  125.     [spc]
  126.         33
  127.         244
  128.         1
  129.         43
  130.         43
  131.         1
  132.         100
  133.     [brk]
  134.         36
  135.     [line]
  136.         8
  137.         0
  138.         1
  139.         0
  140.         1
  141.         1
  142.         1
  143.         10
  144.         10
  145.         1
  146.     [spec]
  147.         0
  148.         0
  149.         
  150.         0
  151.         1
  152.         1
  153.         0
  154.         0
  155.         0
  156.         0
  157.     [nfmt]
  158.         280
  159.         1
  160.         2
  161.         .
  162.         ,
  163.         $
  164.     Indent_List
  165.     2
  166.     1
  167.     2016
  168.     1
  169.     3240
  170.     0
  171. [tag]
  172.     Bullet
  173.     4
  174.     [fnt]
  175.         TimesNewRomanPS
  176.         200
  177.         0
  178.         49152
  179.     [algn]
  180.         1
  181.         1
  182.         2016
  183.         504
  184.         504
  185.     [spc]
  186.         33
  187.         244
  188.         1
  189.         28
  190.         28
  191.         1
  192.         100
  193.     [brk]
  194.         4
  195.     [line]
  196.         8
  197.         0
  198.         1
  199.         0
  200.         1
  201.         1
  202.         1
  203.         10
  204.         10
  205.         1
  206.     [spec]
  207.         0
  208.         0
  209.         <*(>
  210.         360
  211.         1
  212.         1
  213.         0
  214.         0
  215.         0
  216.         0
  217.     [nfmt]
  218.         272
  219.         1
  220.         2
  221.         .
  222.         ,
  223.         $
  224.     Bullet
  225.     0
  226.     360
  227. [tag]
  228.     Number List
  229.     5
  230.     [fnt]
  231.         TimesNewRomanPS
  232.         200
  233.         0
  234.         49152
  235.     [algn]
  236.         1
  237.         1
  238.         720
  239.         504
  240.         504
  241.     [spc]
  242.         33
  243.         273
  244.         1
  245.         0
  246.         0
  247.         1
  248.         100
  249.     [brk]
  250.         4
  251.     [line]
  252.         8
  253.         0
  254.         1
  255.         0
  256.         1
  257.         1
  258.         1
  259.         10
  260.         10
  261.         1
  262.     [spec]
  263.         0
  264.         0
  265.         <*:>.
  266.         360
  267.         1
  268.         1
  269.         0
  270.         0
  271.         0
  272.         0
  273.     [nfmt]
  274.         272
  275.         1
  276.         2
  277.         .
  278.         ,
  279.         $
  280.     Number List
  281.     0
  282.     0
  283. [tag]
  284.     Chapter_Title
  285.     6
  286.     [fnt]
  287.         Helvetica
  288.         720
  289.         0
  290.         16384
  291.     [algn]
  292.         20
  293.         1
  294.         0
  295.         0
  296.         0
  297.     [spc]
  298.         33
  299.         273
  300.         1
  301.         0
  302.         0
  303.         1
  304.         100
  305.     [brk]
  306.         4
  307.     [line]
  308.         8
  309.         0
  310.         1
  311.         0
  312.         1
  313.         11
  314.         12
  315.         100
  316.         100
  317.         1
  318.     [spec]
  319.         0
  320.         0
  321.         
  322.         0
  323.         1
  324.         1
  325.         0
  326.         0
  327.         0
  328.         0
  329.     [nfmt]
  330.         280
  331.         1
  332.         2
  333.         .
  334.         ,
  335.         $
  336.     Chapter_Title
  337.     0
  338.     0
  339. [tag]
  340.     Title
  341.     7
  342.     [fnt]
  343.         Helvetica
  344.         360
  345.         0
  346.         16385
  347.     [algn]
  348.         1
  349.         1
  350.         0
  351.         0
  352.         0
  353.     [spc]
  354.         33
  355.         446
  356.         1
  357.         216
  358.         144
  359.         1
  360.         100
  361.     [brk]
  362.         16
  363.     [line]
  364.         10
  365.         0
  366.         1
  367.         0
  368.         1
  369.         1
  370.         3
  371.         10
  372.         40
  373.         1
  374.     [spec]
  375.         0
  376.         1
  377.         
  378.         0
  379.         1
  380.         1
  381.         0
  382.         0
  383.         0
  384.         0
  385.     [nfmt]
  386.         272
  387.         1
  388.         2
  389.         .
  390.         ,
  391.         $
  392.     Title
  393.     0
  394.     0
  395. [tag]
  396.     Subhead
  397.     8
  398.     [fnt]
  399.         Helvetica
  400.         280
  401.         0
  402.         16385
  403.     [algn]
  404.         1
  405.         1
  406.         648
  407.         0
  408.         0
  409.     [spc]
  410.         33
  411.         360
  412.         1
  413.         288
  414.         144
  415.         1
  416.         100
  417.     [brk]
  418.         4
  419.     [line]
  420.         8
  421.         0
  422.         1
  423.         0
  424.         1
  425.         1
  426.         1
  427.         10
  428.         10
  429.         1
  430.     [spec]
  431.         0
  432.         2
  433.         
  434.         0
  435.         1
  436.         1
  437.         0
  438.         0
  439.         0
  440.         0
  441.     [nfmt]
  442.         272
  443.         1
  444.         2
  445.         .
  446.         ,
  447.         $
  448.     Subhead
  449.     0
  450.     0
  451. [tag]
  452.     Small_Header
  453.     9
  454.     [fnt]
  455.         Helvetica
  456.         220
  457.         0
  458.         16385
  459.     [algn]
  460.         1
  461.         1
  462.         1296
  463.         0
  464.         0
  465.     [spc]
  466.         33
  467.         273
  468.         1
  469.         144
  470.         72
  471.         1
  472.         100
  473.     [brk]
  474.         4
  475.     [line]
  476.         8
  477.         0
  478.         1
  479.         0
  480.         1
  481.         1
  482.         1
  483.         10
  484.         10
  485.         1
  486.     [spec]
  487.         0
  488.         2
  489.         
  490.         0
  491.         1
  492.         1
  493.         0
  494.         0
  495.         0
  496.         0
  497.     [nfmt]
  498.         272
  499.         1
  500.         2
  501.         .
  502.         ,
  503.         $
  504.     Small_Header
  505.     0
  506.     0
  507. [tag]
  508.     Small_Bullet
  509.     11
  510.     [fnt]
  511.         TimesNewRomanPS
  512.         200
  513.         0
  514.         49152
  515.     [algn]
  516.         1
  517.         1
  518.         2016
  519.         504
  520.         504
  521.     [spc]
  522.         33
  523.         244
  524.         1
  525.         28
  526.         28
  527.         1
  528.         100
  529.     [brk]
  530.         4
  531.     [line]
  532.         8
  533.         0
  534.         1
  535.         0
  536.         1
  537.         1
  538.         1
  539.         10
  540.         10
  541.         1
  542.     [spec]
  543.         0
  544.         0
  545.         <*0>
  546.         360
  547.         1
  548.         1
  549.         0
  550.         0
  551.         0
  552.         0
  553.     [nfmt]
  554.         272
  555.         1
  556.         2
  557.         .
  558.         ,
  559.         $
  560.     Small_Bullet
  561.     0
  562.     0
  563. [tag]
  564.     Example_Text
  565.     12
  566.     [fnt]
  567.         Courier
  568.         160
  569.         0
  570.         32768
  571.     [algn]
  572.         1
  573.         1
  574.         2016
  575.         0
  576.         0
  577.     [spc]
  578.         33
  579.         158
  580.         1
  581.         100
  582.         100
  583.         1
  584.         100
  585.     [brk]
  586.         4
  587.     [line]
  588.         8
  589.         0
  590.         1
  591.         0
  592.         1
  593.         1
  594.         1
  595.         10
  596.         10
  597.         1
  598.     [spec]
  599.         0
  600.         0
  601.         
  602.         0
  603.         1
  604.         1
  605.         0
  606.         0
  607.         0
  608.         0
  609.     [nfmt]
  610.         280
  611.         1
  612.         2
  613.         .
  614.         ,
  615.         $
  616.     Example_Text
  617.     0
  618.     360
  619. [tag]
  620.     Header
  621.     0
  622.     [fnt]
  623.         Helvetica
  624.         200
  625.         0
  626.         16385
  627.     [algn]
  628.         1
  629.         1
  630.         0
  631.         0
  632.         0
  633.     [spc]
  634.         33
  635.         273
  636.         1
  637.         0
  638.         0
  639.         1
  640.         100
  641.     [brk]
  642.         4
  643.     [line]
  644.         10
  645.         0
  646.         1
  647.         0
  648.         1
  649.         1
  650.         2
  651.         10
  652.         34
  653.         1
  654.     [spec]
  655.         0
  656.         0
  657.         
  658.         0
  659.         1
  660.         1
  661.         0
  662.         0
  663.         0
  664.         0
  665.     [nfmt]
  666.         280
  667.         1
  668.         2
  669.         .
  670.         ,
  671.         $
  672.     Header
  673.     0
  674.     0
  675. [tag]
  676.     Footer
  677.     0
  678.     [fnt]
  679.         TimesNewRomanPS
  680.         200
  681.         0
  682.         49152
  683.     [algn]
  684.         1
  685.         1
  686.         0
  687.         0
  688.         0
  689.     [spc]
  690.         33
  691.         273
  692.         1
  693.         0
  694.         0
  695.         1
  696.         100
  697.     [brk]
  698.         4
  699.     [line]
  700.         8
  701.         0
  702.         1
  703.         0
  704.         1
  705.         1
  706.         1
  707.         10
  708.         10
  709.         1
  710.     [spec]
  711.         0
  712.         0
  713.         
  714.         0
  715.         1
  716.         1
  717.         0
  718.         0
  719.         0
  720.         0
  721.     [nfmt]
  722.         280
  723.         1
  724.         2
  725.         .
  726.         ,
  727.         $
  728.     Footer
  729.     0
  730.     0
  731. [tag]
  732.     Table Text
  733.     0
  734.     [fnt]
  735.         TimesNewRomanPS
  736.         200
  737.         0
  738.         49152
  739.     [algn]
  740.         8
  741.         1
  742.         0
  743.         0
  744.         0
  745.     [spc]
  746.         33
  747.         273
  748.         1
  749.         0
  750.         0
  751.         1
  752.         100
  753.     [brk]
  754.         4
  755.     [line]
  756.         8
  757.         0
  758.         1
  759.         0
  760.         1
  761.         1
  762.         1
  763.         10
  764.         10
  765.         1
  766.     [spec]
  767.         0
  768.         0
  769.         
  770.         0
  771.         1
  772.         1
  773.         0
  774.         0
  775.         0
  776.         0
  777.     [nfmt]
  778.         280
  779.         1
  780.         2
  781.         .
  782.         ,
  783.         $
  784.     Table Text
  785.     0
  786.     0
  787. [frm]
  788.     9
  789.     721472
  790.     3410
  791.     3957
  792.     10610
  793.     5682
  794.     1
  795.     1
  796.     1
  797.     1 0 0 100 100 10 0
  798.     0
  799.     16777215
  800.     20
  801.     0
  802.     2060
  803.     7200 5025
  804.     [frmname]
  805.         Frame21
  806.     [frmlay]
  807.         5682
  808.         7200
  809.         1
  810.         0
  811.         0
  812.         1
  813.         3957
  814.         0
  815.         2
  816.         1
  817.         0
  818.         1
  819.         1
  820.         0
  821.         5
  822.         3445
  823.         4677
  824.         0
  825.         4917
  826.         6149
  827.         0
  828.         6389
  829.         7621
  830.         0
  831.         7861
  832.         9093
  833.         0
  834.         9333
  835.         10575
  836.         0
  837.     [txt]
  838. @Table Text@<+B><:f,QCourier,>AUTO
  839.  
  840. @Table Text@<+B><:f,QCourier,>BELL
  841.  
  842. @Table Text@<+B><:f,QCourier,>DEFS
  843.  
  844. @Table Text@<+B><:f,QCourier,>ECHODOTS
  845.  
  846. @Table Text@<+B><:f,QCourier,>ERASELINE
  847.  
  848. @Table Text@<+B><:f,QCourier,>FALSE
  849.  
  850. @Table Text@<+B><:f,QCourier,>FCL
  851.  
  852. @Table Text@<+B><:f,QCourier,>FIELDLEN
  853.  
  854. @Table Text@<+B><:f,QCourier,>FNS
  855.  
  856. @Table Text@<+B><:f,QCourier,>F_EXP
  857.  
  858. @Table Text@<+B><:f,QCourier,>F_MW
  859.  
  860. @Table Text@<+B><:f,QCourier,>F_REG
  861.  
  862. @Table Text@<+B><:f,QCourier,>F_SEL
  863.  
  864. @Table Text@<+B><:f,QCourier,>F_SYS
  865.  
  866. @Table Text@<+B><:f,QCourier,>GRAPH
  867.  
  868. @Table Text@<+B><:f,QCourier,>GUIDE
  869.  
  870. @Table Text@<+B><:f,QCourier,>HIGHASCII
  871.  
  872. @Table Text@<+B><:f,QCourier,>LANG
  873.  
  874. @Table Text@<+B><:f,QCourier,>LFAFTER
  875.  
  876. @Table Text@<+B><:f,QCourier,>LFBEFORE
  877.  
  878. @Table Text@<+B><:f,QCourier,>LOGIT
  879.  
  880. @Table Text@<+B><:f,QCourier,>LOGITLEFT
  881.  
  882. @Table Text@<+B><:f,QCourier,>NC
  883.  
  884. @Table Text@<+B><:f,QCourier,>NEWLINE
  885.  
  886. @Table Text@<+B><:f,QCourier,>NOCLEAR
  887.  
  888. @Table Text@<+B><:f,QCourier,>O_RD
  889.  
  890. @Table Text@<+B><:f,QCourier,>O_RW
  891.  
  892. @Table Text@<+B><:f,QCourier,>O_WR
  893.  
  894. @Table Text@<+B><:f,QCourier,>SEC
  895.  
  896. @Table Text@<+B><:f,QCourier,>STACKED
  897.  
  898. @Table Text@<+B><:f,QCourier,>S_DB
  899.  
  900. @Table Text@<+B><:f,QCourier,>S_DN
  901.  
  902. @Table Text@<+B><:f,QCourier,>S_DR
  903.  
  904. @Table Text@<+B><:f,QCourier,>S_DW
  905.  
  906. @Table Text@<+B><:f,QCourier,>TRUE
  907.  
  908. @Table Text@<+B><:f,QCourier,>UPCASE
  909.  
  910. @Table Text@<+B><:f,QCourier,>WORDWRAP
  911.  
  912. @Table Text@<+B><:f,QCourier,>YESNO<:f>
  913.  
  914. @Table Text@
  915. >
  916. [frm]
  917.     11
  918.     721472
  919.     3410
  920.     1656
  921.     10610
  922.     6681
  923.     1
  924.     1
  925.     1
  926.     1 0 0 100 100 10 0
  927.     0
  928.     16777215
  929.     19
  930.     1
  931.     2060
  932.     7200 5025
  933.     [frmname]
  934.         Frame20
  935.     [frmlay]
  936.         6681
  937.         7200
  938.         1
  939.         0
  940.         0
  941.         1
  942.         1656
  943.         0
  944.         2
  945.         1
  946.         0
  947.         1
  948.         1
  949.         0
  950.         5
  951.         3495
  952.         4709
  953.         0
  954.         4949
  955.         6163
  956.         0
  957.         6403
  958.         7617
  959.         0
  960.         7857
  961.         9071
  962.         0
  963.         9311
  964.         10525
  965.         0
  966.     [txt]
  967. @Table Text@<+B><:f200,QCourier,>ADJTIME
  968.  
  969. @Table Text@<+B><:f200,QCourier,>ANSIPOS
  970.  
  971. @Table Text@<+B><:f200,QCourier,>BACKUP
  972.  
  973. @Table Text@<+B><:f200,QCourier,>BLT
  974.  
  975. @Table Text@<+B><:f200,QCourier,>BROADCAST
  976.  
  977. @Table Text@<+B><:f200,QCourier,>BYE
  978.  
  979. @Table Text@<+B><:f200,QCourier,>CALL
  980.  
  981. @Table Text@<+B><:f200,QCourier,>CDCHKOFF
  982.  
  983. @Table Text@<+B><:f200,QCourier,>CDCHKON
  984.  
  985. @Table Text@<+B><:f200,QCourier,>CHAT
  986.  
  987. @Table Text@<+B><:f200,QCourier,>CLOSECAP
  988.  
  989. @Table Text@<+B><:f200,QCourier,>CLREOL
  990.  
  991. @Table Text@<+B><:f200,QCourier,>CLS
  992.  
  993. @Table Text@<+B><:f200,QCourier,>COLOR
  994.  
  995. @Table Text@<+B><:f200,QCourier,>CONFFLAG
  996.  
  997. @Table Text@<+B><:f200,QCourier,>CONFUNFLAG
  998.  
  999. @Table Text@<+B><:f200,QCourier,>DBGLEVEL
  1000.  
  1001. @Table Text@<+B><:f200,QCourier,>DEC
  1002.  
  1003. @Table Text@<+B><:f200,QCourier,>DEFCOLOR
  1004.  
  1005. @Table Text@<+B><:f200,QCourier,>DELAY
  1006.  
  1007. @Table Text@<+B><:f200,QCourier,>DELETE
  1008.  
  1009. @Table Text@<+B><:f200,QCourier,>DELUSER
  1010.  
  1011. @Table Text@<+B><:f200,QCourier,>DIR
  1012.  
  1013. @Table Text@<+B><:f200,QCourier,>DISPFILE
  1014.  
  1015. @Table Text@<+B><:f200,QCourier,>DISPSTR
  1016.  
  1017. @Table Text@<+B><:f200,QCourier,>DISPTEXT
  1018.  
  1019. @Table Text@<+B><:f200,QCourier,>DOINTR
  1020.  
  1021. @Table Text@<+B><:f200,QCourier,>DTROFF
  1022.  
  1023. @Table Text@<+B><:f200,QCourier,>DTRON
  1024.  
  1025. @Table Text@<+B><:f200,QCourier,>ELSE
  1026.  
  1027. @Table Text@<+B><:f200,QCourier,>ELSEIF
  1028.  
  1029. @Table Text@<+B><:f200,QCourier,>END
  1030.  
  1031. @Table Text@<+B><:f200,QCourier,>ENDIF
  1032.  
  1033. @Table Text@<+B><:f200,QCourier,>ENDWHILE
  1034.  
  1035. @Table Text@<+B><:f200,QCourier,>FAPPEND
  1036.  
  1037. @Table Text@<+B><:f200,QCourier,>FCLOSE
  1038.  
  1039. @Table Text@<+B><:f200,QCourier,>FCREATE
  1040.  
  1041. @Table Text@<+B><:f200,QCourier,>FGET
  1042.  
  1043. @Table Text@<+B><:f200,QCourier,>FOPEN
  1044.  
  1045. @Table Text@<+B><:f200,QCourier,>FOR
  1046.  
  1047. @Table Text@<+B><:f200,QCourier,>FORWARD
  1048.  
  1049. @Table Text@<+B><:f200,QCourier,>FPUT
  1050.  
  1051. @Table Text@<+B><:f200,QCourier,>FPUTLN
  1052.  
  1053. @Table Text@<+B><:f200,QCourier,>FPUTPAD
  1054.  
  1055. @Table Text@<+B><:f200,QCourier,>FRESHLINE
  1056.  
  1057. @Table Text@<+B><:f200,QCourier,>FREWIND
  1058.  
  1059. @Table Text@<+B><:f200,QCourier,>GETTOKEN
  1060.  
  1061. @Table Text@<+B><:f200,QCourier,>GETUSER
  1062.  
  1063. @Table Text@<+B><:f200,QCourier,>GOODBYE
  1064.  
  1065. @Table Text@<+B><:f200,QCourier,>GOSUB
  1066.  
  1067. @Table Text@<+B><:f200,QCourier,>GOTO
  1068.  
  1069. @Table Text@<+B><:f200,QCourier,>HANGUP
  1070.  
  1071. @Table Text@<+B><:f200,QCourier,>IF
  1072.  
  1073. @Table Text@<+B><:f200,QCourier,>INC
  1074.  
  1075. @Table Text@<+B><:f200,QCourier,>INPUT
  1076.  
  1077. @Table Text@<+B><:f200,QCourier,>INPUTCC
  1078.  
  1079. @Table Text@<+B><:f200,QCourier,>INPUTDATE
  1080.  
  1081. @Table Text@<+B><:f200,QCourier,>INPUTINT
  1082.  
  1083. @Table Text@<+B><:f200,QCourier,>INPUTMONEY
  1084.  
  1085. @Table Text@<+B><:f200,QCourier,>INPUTSTR
  1086.  
  1087. @Table Text@<+B><:f200,QCourier,>INPUTTEXT
  1088.  
  1089. @Table Text@<+B><:f200,QCourier,>INPUTTIME
  1090.  
  1091. @Table Text@<+B><:f200,QCourier,>INPUTYN
  1092.  
  1093. @Table Text@<+B><:f200,QCourier,>JOIN
  1094.  
  1095. @Table Text@<+B><:f200,QCourier,>KBDCHKOFF
  1096.  
  1097. @Table Text@<+B><:f200,QCourier,>KBDCHKON
  1098.  
  1099. @Table Text@<+B><:f200,QCourier,>KBDFILE
  1100.  
  1101. @Table Text@<+B><:f200,QCourier,>KBDSTUFF
  1102.  
  1103. @Table Text@<+B><:f200,QCourier,>LET
  1104.  
  1105. @Table Text@<+B><:f200,QCourier,>LOG
  1106.  
  1107. @Table Text@<+B><:f200,QCourier,>MESSAGE
  1108.  
  1109. @Table Text@<+B><:f200,QCourier,>MORE
  1110.  
  1111. @Table Text@<+B><:f200,QCourier,>MPRINT
  1112.  
  1113. @Table Text@<+B><:f200,QCourier,>MPRINTLN
  1114.  
  1115. @Table Text@<+B><:f200,QCourier,>NEWLINE
  1116.  
  1117. @Table Text@<+B><:f200,QCourier,>NEWLINES
  1118.  
  1119. @Table Text@<+B><:f200,QCourier,>NEWPWD
  1120.  
  1121. @Table Text@<+B><:f200,QCourier,>NEXT
  1122.  
  1123. @Table Text@<+B><:f200,QCourier,>OPENCAP
  1124.  
  1125. @Table Text@<+B><:f200,QCourier,>OPTEXT
  1126.  
  1127. @Table Text@<+B><:f200,QCourier,>PAGEOFF
  1128.  
  1129. @Table Text@<+B><:f200,QCourier,>PAGEON
  1130.  
  1131. @Table Text@<+B><:f200,QCourier,>POKEB
  1132.  
  1133. @Table Text@<+B><:f200,QCourier,>POKEDW
  1134.  
  1135. @Table Text@<+B><:f200,QCourier,>POKEW
  1136.  
  1137. @Table Text@<+B><:f200,QCourier,>POP
  1138.  
  1139. @Table Text@<+B><:f200,QCourier,>PRINT
  1140.  
  1141. @Table Text@<+B><:f200,QCourier,>PRINTLN
  1142.  
  1143. @Table Text@<+B><:f200,QCourier,>PROMPTSTR
  1144.  
  1145. @Table Text@<+B><:f200,QCourier,>PUSH
  1146.  
  1147. @Table Text@<+B><:f200,QCourier,>PUTUSER
  1148.  
  1149. @Table Text@<+B><:f200,QCourier,>QUEST
  1150.  
  1151. @Table Text@<+B><:f200,QCourier,>RDUNET
  1152.  
  1153. @Table Text@<+B><:f200,QCourier,>RDUSYS
  1154.  
  1155. @Table Text@<+B><:f200,QCourier,>RENAME
  1156.  
  1157. @Table Text@<+B><:f200,QCourier,>RESETDISP
  1158.  
  1159. @Table Text@<+B><:f200,QCourier,>RESTSCRN
  1160.  
  1161. @Table Text@<+B><:f200,QCourier,>RETURN
  1162.  
  1163. @Table Text@<+B><:f200,QCourier,>SAVESCRN
  1164.  
  1165. @Table Text@<+B><:f200,QCourier,>SENDMODEM
  1166.  
  1167. @Table Text@<+B><:f200,QCourier,>SHELL
  1168.  
  1169. @Table Text@<+B><:f200,QCourier,>SHOWOFF
  1170.  
  1171. @Table Text@<+B><:f200,QCourier,>SHOWON
  1172.  
  1173. @Table Text@<+B><:f200,QCourier,>SOUND
  1174.  
  1175. @Table Text@<+B><:f200,QCourier,>SPRINT
  1176.  
  1177. @Table Text@<+B><:f200,QCourier,>SPRINTLN
  1178.  
  1179. @Table Text@<+B><:f200,QCourier,>STARTDISP
  1180.  
  1181. @Table Text@<+B><:f200,QCourier,>STOP
  1182.  
  1183. @Table Text@<+B><:f200,QCourier,>TOKENIZE
  1184.  
  1185. @Table Text@<+B><:f200,QCourier,>VARADDR
  1186.  
  1187. @Table Text@<+B><:f200,QCourier,>VAROFF
  1188.  
  1189. @Table Text@<+B><:f200,QCourier,>VARSEG
  1190.  
  1191. @Table Text@<+B><:f200,QCourier,>WAIT
  1192.  
  1193. @Table Text@<+B><:f200,QCourier,>WAITFOR
  1194.  
  1195. @Table Text@<+B><:f200,QCourier,>WHILE
  1196.  
  1197. @Table Text@<+B><:f200,QCourier,>WRUNET
  1198.  
  1199. @Table Text@<+B><:f200,QCourier,>WRUSYS<:f>
  1200.  
  1201. @Table Text@
  1202. >
  1203. [frm]
  1204.     3
  1205.     721472
  1206.     3410
  1207.     1896
  1208.     10610
  1209.     6921
  1210.     1
  1211.     1
  1212.     1
  1213.     1 0 0 100 100 10 0
  1214.     0
  1215.     16777215
  1216.     18
  1217.     2
  1218.     2060
  1219.     7200 5025
  1220.     [frmname]
  1221.         Frame20
  1222.     [frmlay]
  1223.         6921
  1224.         7200
  1225.         1
  1226.         0
  1227.         0
  1228.         1
  1229.         1896
  1230.         0
  1231.         2
  1232.         1
  1233.         0
  1234.         1
  1235.         1
  1236.         0
  1237.         5
  1238.         3495
  1239.         4709
  1240.         0
  1241.         4949
  1242.         6163
  1243.         0
  1244.         6403
  1245.         7617
  1246.         0
  1247.         7857
  1248.         9071
  1249.         0
  1250.         9311
  1251.         10525
  1252.         0
  1253.     [txt]
  1254. @Table Text@<+B><:f200,QCourier,>ADJTIME
  1255.  
  1256. @Table Text@<+B><:f200,QCourier,>ANSIPOS
  1257.  
  1258. @Table Text@<+B><:f200,QCourier,>BACKUP
  1259.  
  1260. @Table Text@<+B><:f200,QCourier,>BLT
  1261.  
  1262. @Table Text@<+B><:f200,QCourier,>BROADCAST
  1263.  
  1264. @Table Text@<+B><:f200,QCourier,>BYE
  1265.  
  1266. @Table Text@<+B><:f200,QCourier,>CALL
  1267.  
  1268. @Table Text@<+B><:f200,QCourier,>CDCHKOFF
  1269.  
  1270. @Table Text@<+B><:f200,QCourier,>CDCHKON
  1271.  
  1272. @Table Text@<+B><:f200,QCourier,>CHAT
  1273.  
  1274. @Table Text@<+B><:f200,QCourier,>CLOSECAP
  1275.  
  1276. @Table Text@<+B><:f200,QCourier,>CLREOL
  1277.  
  1278. @Table Text@<+B><:f200,QCourier,>CLS
  1279.  
  1280. @Table Text@<+B><:f200,QCourier,>COLOR
  1281.  
  1282. @Table Text@<+B><:f200,QCourier,>CONFFLAG
  1283.  
  1284. @Table Text@<+B><:f200,QCourier,>CONFUNFLAG
  1285.  
  1286. @Table Text@<+B><:f200,QCourier,>DBGLEVEL
  1287.  
  1288. @Table Text@<+B><:f200,QCourier,>DEC
  1289.  
  1290. @Table Text@<+B><:f200,QCourier,>DEFCOLOR
  1291.  
  1292. @Table Text@<+B><:f200,QCourier,>DELAY
  1293.  
  1294. @Table Text@<+B><:f200,QCourier,>DELETE
  1295.  
  1296. @Table Text@<+B><:f200,QCourier,>DELUSER
  1297.  
  1298. @Table Text@<+B><:f200,QCourier,>DIR
  1299.  
  1300. @Table Text@<+B><:f200,QCourier,>DISPFILE
  1301.  
  1302. @Table Text@<+B><:f200,QCourier,>DISPSTR
  1303.  
  1304. @Table Text@<+B><:f200,QCourier,>DISPTEXT
  1305.  
  1306. @Table Text@<+B><:f200,QCourier,>DOINTR
  1307.  
  1308. @Table Text@<+B><:f200,QCourier,>DTROFF
  1309.  
  1310. @Table Text@<+B><:f200,QCourier,>DTRON
  1311.  
  1312. @Table Text@<+B><:f200,QCourier,>ELSE
  1313.  
  1314. @Table Text@<+B><:f200,QCourier,>ELSEIF
  1315.  
  1316. @Table Text@<+B><:f200,QCourier,>END
  1317.  
  1318. @Table Text@<+B><:f200,QCourier,>ENDIF
  1319.  
  1320. @Table Text@<+B><:f200,QCourier,>ENDWHILE
  1321.  
  1322. @Table Text@<+B><:f200,QCourier,>FAPPEND
  1323.  
  1324. @Table Text@<+B><:f200,QCourier,>FCLOSE
  1325.  
  1326. @Table Text@<+B><:f200,QCourier,>FCREATE
  1327.  
  1328. @Table Text@<+B><:f200,QCourier,>FGET
  1329.  
  1330. @Table Text@<+B><:f200,QCourier,>FOPEN
  1331.  
  1332. @Table Text@<+B><:f200,QCourier,>FOR
  1333.  
  1334. @Table Text@<+B><:f200,QCourier,>FORWARD
  1335.  
  1336. @Table Text@<+B><:f200,QCourier,>FPUT
  1337.  
  1338. @Table Text@<+B><:f200,QCourier,>FPUTLN
  1339.  
  1340. @Table Text@<+B><:f200,QCourier,>FPUTPAD
  1341.  
  1342. @Table Text@<+B><:f200,QCourier,>FRESHLINE
  1343.  
  1344. @Table Text@<+B><:f200,QCourier,>FREWIND
  1345.  
  1346. @Table Text@<+B><:f200,QCourier,>GETTOKEN
  1347.  
  1348. @Table Text@<+B><:f200,QCourier,>GETUSER
  1349.  
  1350. @Table Text@<+B><:f200,QCourier,>GOODBYE
  1351.  
  1352. @Table Text@<+B><:f200,QCourier,>GOSUB
  1353.  
  1354. @Table Text@<+B><:f200,QCourier,>GOTO
  1355.  
  1356. @Table Text@<+B><:f200,QCourier,>HANGUP
  1357.  
  1358. @Table Text@<+B><:f200,QCourier,>IF
  1359.  
  1360. @Table Text@<+B><:f200,QCourier,>INC
  1361.  
  1362. @Table Text@<+B><:f200,QCourier,>INPUT
  1363.  
  1364. @Table Text@<+B><:f200,QCourier,>INPUTCC
  1365.  
  1366. @Table Text@<+B><:f200,QCourier,>INPUTDATE
  1367.  
  1368. @Table Text@<+B><:f200,QCourier,>INPUTINT
  1369.  
  1370. @Table Text@<+B><:f200,QCourier,>INPUTMONEY
  1371.  
  1372. @Table Text@<+B><:f200,QCourier,>INPUTSTR
  1373.  
  1374. @Table Text@<+B><:f200,QCourier,>INPUTTEXT
  1375.  
  1376. @Table Text@<+B><:f200,QCourier,>INPUTTIME
  1377.  
  1378. @Table Text@<+B><:f200,QCourier,>INPUTYN
  1379.  
  1380. @Table Text@<+B><:f200,QCourier,>JOIN
  1381.  
  1382. @Table Text@<+B><:f200,QCourier,>KBDCHKOFF
  1383.  
  1384. @Table Text@<+B><:f200,QCourier,>KBDCHKON
  1385.  
  1386. @Table Text@<+B><:f200,QCourier,>KBDFILE
  1387.  
  1388. @Table Text@<+B><:f200,QCourier,>KBDSTUFF
  1389.  
  1390. @Table Text@<+B><:f200,QCourier,>LET
  1391.  
  1392. @Table Text@<+B><:f200,QCourier,>LOG
  1393.  
  1394. @Table Text@<+B><:f200,QCourier,>MESSAGE
  1395.  
  1396. @Table Text@<+B><:f200,QCourier,>MORE
  1397.  
  1398. @Table Text@<+B><:f200,QCourier,>MPRINT
  1399.  
  1400. @Table Text@<+B><:f200,QCourier,>MPRINTLN
  1401.  
  1402. @Table Text@<+B><:f200,QCourier,>NEWLINE
  1403.  
  1404. @Table Text@<+B><:f200,QCourier,>NEWLINES
  1405.  
  1406. @Table Text@<+B><:f200,QCourier,>NEWPWD
  1407.  
  1408. @Table Text@<+B><:f200,QCourier,>NEXT
  1409.  
  1410. @Table Text@<+B><:f200,QCourier,>OPENCAP
  1411.  
  1412. @Table Text@<+B><:f200,QCourier,>OPTEXT
  1413.  
  1414. @Table Text@<+B><:f200,QCourier,>PAGEOFF
  1415.  
  1416. @Table Text@<+B><:f200,QCourier,>PAGEON
  1417.  
  1418. @Table Text@<+B><:f200,QCourier,>POKEB
  1419.  
  1420. @Table Text@<+B><:f200,QCourier,>POKEDW
  1421.  
  1422. @Table Text@<+B><:f200,QCourier,>POKEW
  1423.  
  1424. @Table Text@<+B><:f200,QCourier,>POP
  1425.  
  1426. @Table Text@<+B><:f200,QCourier,>PRINT
  1427.  
  1428. @Table Text@<+B><:f200,QCourier,>PRINTLN
  1429.  
  1430. @Table Text@<+B><:f200,QCourier,>PROMPTSTR
  1431.  
  1432. @Table Text@<+B><:f200,QCourier,>PUSH
  1433.  
  1434. @Table Text@<+B><:f200,QCourier,>PUTUSER
  1435.  
  1436. @Table Text@<+B><:f200,QCourier,>QUEST
  1437.  
  1438. @Table Text@<+B><:f200,QCourier,>RDUNET
  1439.  
  1440. @Table Text@<+B><:f200,QCourier,>RDUSYS
  1441.  
  1442. @Table Text@<+B><:f200,QCourier,>RENAME
  1443.  
  1444. @Table Text@<+B><:f200,QCourier,>RESETDISP
  1445.  
  1446. @Table Text@<+B><:f200,QCourier,>RESTSCRN
  1447.  
  1448. @Table Text@<+B><:f200,QCourier,>RETURN
  1449.  
  1450. @Table Text@<+B><:f200,QCourier,>SAVESCRN
  1451.  
  1452. @Table Text@<+B><:f200,QCourier,>SENDMODEM
  1453.  
  1454. @Table Text@<+B><:f200,QCourier,>SHELL
  1455.  
  1456. @Table Text@<+B><:f200,QCourier,>SHOWOFF
  1457.  
  1458. @Table Text@<+B><:f200,QCourier,>SHOWON
  1459.  
  1460. @Table Text@<+B><:f200,QCourier,>SOUND
  1461.  
  1462. @Table Text@<+B><:f200,QCourier,>SPRINT
  1463.  
  1464. @Table Text@<+B><:f200,QCourier,>SPRINTLN
  1465.  
  1466. @Table Text@<+B><:f200,QCourier,>STARTDISP
  1467.  
  1468. @Table Text@<+B><:f200,QCourier,>STOP
  1469.  
  1470. @Table Text@<+B><:f200,QCourier,>TOKENIZE
  1471.  
  1472. @Table Text@<+B><:f200,QCourier,>VARADDR
  1473.  
  1474. @Table Text@<+B><:f200,QCourier,>VAROFF
  1475.  
  1476. @Table Text@<+B><:f200,QCourier,>VARSEG
  1477.  
  1478. @Table Text@<+B><:f200,QCourier,>WAIT
  1479.  
  1480. @Table Text@<+B><:f200,QCourier,>WAITFOR
  1481.  
  1482. @Table Text@<+B><:f200,QCourier,>WHILE
  1483.  
  1484. @Table Text@<+B><:f200,QCourier,>WRUNET
  1485.  
  1486. @Table Text@<+B><:f200,QCourier,>WRUSYS<:f>
  1487.  
  1488. @Table Text@
  1489. >
  1490. [frm]
  1491.     108
  1492.     1704004
  1493.     826
  1494.     7405
  1495.     9433
  1496.     8426
  1497.     0
  1498.     1
  1499.     1
  1500.     1 0 0 0 0 0 0
  1501.     0
  1502.     16777215
  1503.     12
  1504.     3
  1505.     1656
  1506.     7590 1125
  1507.     [frmlay]
  1508.         8555
  1509.         8607
  1510.         1
  1511.         0
  1512.         0
  1513.         1
  1514.         7405
  1515.         0
  1516.         0
  1517.         2
  1518.         0
  1519.         124
  1520.         32
  1521.         53526
  1522.         1
  1523.         1674
  1524.         10746
  1525.         0
  1526.     [tbl]
  1527.          3 7 0 86 417 86 5 43 43
  1528.         [h]
  1529.              0 240 86 2 0 7 0
  1530.              1 240 86 2 0 7 0
  1531.              2 240 86 2 0 7 0
  1532.         [e]
  1533.         [w]
  1534.              0 1008 86 2 0
  1535.              1 1180 86 2 0
  1536.              2 1296 86 2 0
  1537.              3 1368 86 2 0
  1538.              4 1512 86 2 0
  1539.              5 1238 86 2 0
  1540.              6 360 86 2 0
  1541.         [e]
  1542.         [data]
  1543.              0 0 24 0 0 0 8738 1 0 0 0 0
  1544. <+B>INPUT
  1545.  
  1546. >
  1547.              0 1 24 0 0 0 8738 1 0 0 0 0
  1548. <+B>CC
  1549.  
  1550. >
  1551.              0 2 24 0 0 0 8738 1 0 0 0 0
  1552. <+B>DATE
  1553.  
  1554. >
  1555.              0 3 24 0 0 0 8738 1 0 0 0 0
  1556. <+B>INT
  1557.  
  1558. >
  1559.              0 4 24 0 0 0 8738 1 0 0 0 0
  1560. <+B>MONEY
  1561.  
  1562. >
  1563.              0 5 24 0 0 0 8738 1 0 0 0 0
  1564. <+B>TIME
  1565.  
  1566. >
  1567.              0 6 24 0 0 0 8738 1 0 0 0 0
  1568. <+B>YN
  1569.  
  1570. >
  1571.              1 0 24 0 0 0 8738 1 0 0 0 0
  1572. <+B>Valid Chars
  1573.  
  1574. >
  1575.              1 1 49176 0 0 0 8738 1 0 0 0 0
  1576. <+B>"0123456789"
  1577.  
  1578. >
  1579.              1 2 24 0 0 0 8738 1 0 0 0 0
  1580. <+B>"0123456789-/"
  1581.  
  1582. >
  1583.              1 3 24 0 0 0 8738 1 0 0 0 0
  1584. <+B>"0123456789+-"
  1585.  
  1586. >
  1587.              1 4 24 0 0 0 8738 1 0 0 0 0
  1588. <+B>"0123456789+-$."
  1589.  
  1590. >
  1591.              1 5 24 0 0 0 8738 1 0 0 0 0
  1592. <+B>"0123456789:"
  1593.  
  1594. >
  1595.              1 6 24 0 0 0 8738 1 0 0 0 0
  1596. <+B>*
  1597.  
  1598. >
  1599.              2 0 24 0 0 0 8738 1 0 0 0 0
  1600. <+B>Max Length
  1601.  
  1602. >
  1603.              2 1 24 0 0 0 8738 1 0 0 0 0
  1604. <+B>16.00
  1605.  
  1606. >
  1607.              2 2 24 0 0 0 8738 1 0 0 0 0
  1608. <+B>8.00
  1609.  
  1610. >
  1611.              2 3 24 0 0 0 8738 1 0 0 0 0
  1612. <+B>11.00
  1613.  
  1614. >
  1615.              2 4 24 0 0 0 8738 1 0 0 0 0
  1616. <+B>13.00
  1617.  
  1618. >
  1619.              2 5 24 0 0 0 8738 1 0 0 0 0
  1620. <+B>8.00
  1621.  
  1622. >
  1623.              2 6 24 0 0 0 8738 1 0 0 0 0
  1624. <+B>1.00
  1625.  
  1626. >
  1627.         [e]
  1628.     [tble]
  1629. [frm]
  1630.     59
  1631.     1704004
  1632.     2090
  1633.     8140
  1634.     8169
  1635.     8711
  1636.     0
  1637.     1
  1638.     1
  1639.     1 0 0 0 0 0 0
  1640.     0
  1641.     16777215
  1642.     11
  1643.     4
  1644.     1656
  1645.     7590 1125
  1646.     [frmlay]
  1647.         8375
  1648.         6079
  1649.         1
  1650.         0
  1651.         0
  1652.         1
  1653.         8140
  1654.         0
  1655.         0
  1656.         2
  1657.         0
  1658.         124
  1659.         32
  1660.         53526
  1661.         1
  1662.         1494
  1663.         10566
  1664.         0
  1665.     [tbl]
  1666.          2 12 0 86 417 86 5 43 43
  1667.         [h]
  1668.              0 178 86 2 0 12 0
  1669.              1 178 86 2 0 12 0
  1670.         [e]
  1671.         [w]
  1672.              0 417 86 0 0
  1673.              1 417 86 0 0
  1674.              2 417 86 0 0
  1675.              3 417 86 0 0
  1676.              4 417 86 0 0
  1677.              5 417 86 0 0
  1678.              6 417 86 0 0
  1679.              7 417 86 0 0
  1680.              8 417 86 0 0
  1681.              9 417 86 0 0
  1682.              10 417 86 0 0
  1683.              11 417 86 0 0
  1684.         [e]
  1685.         [data]
  1686.              0 0 24 0 0 0 8738 1 0 0 0 0
  1687. <+B><+!><:f160,QCourier New,>O<-!><:f>
  1688.  
  1689. >
  1690.              0 1 24 0 0 0 8738 1 0 0 0 0
  1691. <+B><+!><:f160,QCourier New,>D<-!><:f>
  1692.  
  1693. >
  1694.              0 2 24 0 0 0 8738 1 0 0 0 0
  1695. <+B><+!><:f160,QCourier New,>I<-!><:f>
  1696.  
  1697. >
  1698.              0 3 24 0 0 0 8738 1 0 0 0 0
  1699. <+B><+!><:f160,QCourier New,>T<-!><:f>
  1700.  
  1701. >
  1702.              0 4 24 0 0 0 8738 1 0 0 0 0
  1703. <+B><+!><:f160,QCourier New,>S<-!><:f>
  1704.  
  1705. >
  1706.              0 5 24 0 0 0 8738 1 0 0 0 0
  1707. <+B><+!><:f160,QCourier New,>Z<-!><:f>
  1708.  
  1709. >
  1710.              0 6 24 0 0 0 8738 1 0 0 0 0
  1711. <+B><+!><:f160,QCourier New,>-<-!><:f>
  1712.  
  1713. >
  1714.              0 7 24 0 0 0 8738 1 0 0 0 0
  1715. <+B><+!><:f160,QCourier New,>A<-!><:f>
  1716.  
  1717. >
  1718.              0 8 24 0 0 0 8738 1 0 0 0 0
  1719. <+B><+!><:f160,QCourier New,>-<-!><:f>
  1720.  
  1721. >
  1722.              0 9 24 0 0 0 8738 1 0 0 0 0
  1723. <+B><+!><:f160,QCourier New,>P<-!><:f>
  1724.  
  1725. >
  1726.              0 10 24 0 0 0 8738 1 0 0 0 0
  1727. <+B><+!><:f160,QCourier New,>-<-!><:f>
  1728.  
  1729. >
  1730.              0 11 24 0 0 0 8738 1 0 0 0 0
  1731. <+B><+!><:f160,QCourier New,>C<-!><:f>
  1732.  
  1733. >
  1734.              1 0 24 0 0 0 8738 1 0 0 0 0
  1735. <+B><+!><:f160,QCourier New,>800h<-!><:f>
  1736.  
  1737. >
  1738.              1 1 24 0 0 0 8738 1 0 0 0 0
  1739. <+B><+!><:f160,QCourier New,>400h<-!><:f>
  1740.  
  1741. >
  1742.              1 2 49176 0 0 0 8738 1 0 0 0 0
  1743. <+B><+!><:f160,QCourier New,>200h<-!><:f>
  1744.  
  1745. >
  1746.              1 3 24 0 0 0 8738 1 0 0 0 0
  1747. <+B><+!><:f160,QCourier New,>100h<-!><:f>
  1748.  
  1749. >
  1750.              1 4 24 0 0 0 8738 1 0 0 0 0
  1751. <+B><+!><:f160,QCourier New,>080h<-!><:f>
  1752.  
  1753. >
  1754.              1 5 24 0 0 0 8738 1 0 0 0 0
  1755. <+B><+!><:f160,QCourier New,>040h<-!><:f>
  1756.  
  1757. >
  1758.              1 6 24 0 0 0 8738 1 0 0 0 0
  1759. <+B><+!><:f160,QCourier New,>020h<-!><:f>
  1760.  
  1761. >
  1762.              1 7 24 0 0 0 8738 1 0 0 0 0
  1763. <+B><+!><:f160,QCourier New,>010h<-!><:f>
  1764.  
  1765. >
  1766.              1 8 24 0 0 0 8738 1 0 0 0 0
  1767. <+B><+!><:f160,QCourier New,>008h<-!><:f>
  1768.  
  1769. >
  1770.              1 9 24 0 0 0 8738 1 0 0 0 0
  1771. <+B><+!><:f160,QCourier New,>004h<-!><:f>
  1772.  
  1773. >
  1774.              1 10 24 0 0 0 8738 1 0 0 0 0
  1775. <+B><+!><:f160,QCourier New,>002h<-!><:f>
  1776.  
  1777. >
  1778.              1 11 24 0 0 0 8738 1 0 0 0 0
  1779. <+B><+!><:f160,QCourier New,>001h<-!><:f>
  1780.  
  1781. >
  1782.         [e]
  1783.     [tble]
  1784. [frm]
  1785.     9
  1786.     721472
  1787.     2505
  1788.     1656
  1789.     9705
  1790.     7732
  1791.     1
  1792.     1
  1793.     1
  1794.     1 0 0 100 100 10 0
  1795.     0
  1796.     16777215
  1797.     17
  1798.     5
  1799.     2055
  1800.     7200 1725
  1801.     [frmname]
  1802.         Frame21
  1803.     [frmlay]
  1804.         7732
  1805.         7200
  1806.         1
  1807.         0
  1808.         0
  1809.         1
  1810.         1656
  1811.         0
  1812.         2
  1813.         1
  1814.         0
  1815.         1
  1816.         1
  1817.         0
  1818.         5
  1819.         2605
  1820.         3810
  1821.         0
  1822.         4050
  1823.         5255
  1824.         0
  1825.         5495
  1826.         6700
  1827.         0
  1828.         6940
  1829.         8145
  1830.         0
  1831.         8385
  1832.         9605
  1833.         0
  1834.     [txt]
  1835. @Table Text@<+B><:f,QCourier,>ABORT
  1836.  
  1837. @Table Text@<+B><:f,QCourier,>ABS
  1838.  
  1839. @Table Text@<+B><:f,QCourier,>AND
  1840.  
  1841. @Table Text@<+B><:f,QCourier,>ANSION
  1842.  
  1843. @Table Text@<+B><:f,QCourier,>ASC
  1844.  
  1845. @Table Text@<+B><:f,QCourier,>B2W
  1846.  
  1847. @Table Text@<+B><:f,QCourier,>CALLID
  1848.  
  1849. @Table Text@<+B><:f,QCourier,>CALLNUM
  1850.  
  1851. @Table Text@<+B><:f,QCourier,>CARRIER
  1852.  
  1853. @Table Text@<+B><:f,QCourier,>CCTYPE
  1854.  
  1855. @Table Text@<+B><:f,QCourier,>CDON
  1856.  
  1857. @Table Text@<+B><:f,QCourier,>CHR
  1858.  
  1859. @Table Text@<+B><:f,QCourier,>CURCOLOR
  1860.  
  1861. @Table Text@<+B><:f,QCourier,>CURCONF
  1862.  
  1863. @Table Text@<+B><:f,QCourier,>CURSEC
  1864.  
  1865. @Table Text@<+B><:f,QCourier,>DATE
  1866.  
  1867. @Table Text@<+B><:f,QCourier,>DAY
  1868.  
  1869. @Table Text@<+B><:f,QCourier,>DBGLEVEL
  1870.  
  1871. @Table Text@<+B><:f,QCourier,>DEFCOLOR
  1872.  
  1873. @Table Text@<+B><:f,QCourier,>DOW
  1874.  
  1875. @Table Text@<+B><:f,QCourier,>EXIST
  1876.  
  1877. @Table Text@<+B><:f,QCourier,>FERR
  1878.  
  1879. @Table Text@<+B><:f,QCourier,>FILEINF
  1880.  
  1881. @Table Text@<+B><:f,QCourier,>FMTCC
  1882.  
  1883. @Table Text@<+B><:f,QCourier,>GETENV
  1884.  
  1885. @Table Text@<+B><:f,QCourier,>GETTOKEN
  1886.  
  1887. @Table Text@<+B><:f,QCourier,>GETX
  1888.  
  1889. @Table Text@<+B><:f,QCourier,>GETY
  1890.  
  1891. @Table Text@<+B><:f,QCourier,>GRAFMODE
  1892.  
  1893. @Table Text@<+B><:f,QCourier,>HELPPATH
  1894.  
  1895. @Table Text@<+B><:f,QCourier,>HOUR
  1896.  
  1897. @Table Text@<+B><:f,QCourier,>I2S
  1898.  
  1899. @Table Text@<+B><:f,QCourier,>INKEY
  1900.  
  1901. @Table Text@<+B><:f,QCourier,>INSTR
  1902.  
  1903. @Table Text@<+B><:f,QCourier,>KINKEY
  1904.  
  1905. @Table Text@<+B><:f,QCourier,>LANGEXT
  1906.  
  1907. @Table Text@<+B><:f,QCourier,>LEFT
  1908.  
  1909. @Table Text@<+B><:f,QCourier,>LEN
  1910.  
  1911. @Table Text@<+B><:f,QCourier,>LOGGEDON
  1912.  
  1913. @Table Text@<+B><:f,QCourier,>LOWER
  1914.  
  1915. @Table Text@<+B><:f,QCourier,>LTRIM
  1916.  
  1917. @Table Text@<+B><:f,QCourier,>MASK_ALNUM
  1918.  
  1919. @Table Text@<+B><:f,QCourier,>MASK_ALPHA
  1920.  
  1921. @Table Text@<+B><:f,QCourier,>MASK_ASCII
  1922.  
  1923. @Table Text@<+B><:f,QCourier,>MASK_FILE
  1924.  
  1925. @Table Text@<+B><:f,QCourier,>MASK_NUM
  1926.  
  1927. @Table Text@<+B><:f,QCourier,>MASK_PATH
  1928.  
  1929. @Table Text@<+B><:f,QCourier,>MASK_PWD
  1930.  
  1931. @Table Text@<+B><:f,QCourier,>MAXNODE
  1932.  
  1933. @Table Text@<+B><:f,QCourier,>MGETBYTE
  1934.  
  1935. @Table Text@<+B><:f,QCourier,>MID
  1936.  
  1937. @Table Text@<+B><:f,QCourier,>MIN
  1938.  
  1939. @Table Text@<+B><:f,QCourier,>MINKEY
  1940.  
  1941. @Table Text@<+B><:f,QCourier,>MINLEFT
  1942.  
  1943. @Table Text@<+B><:f,QCourier,>MINON
  1944.  
  1945. @Table Text@<+B><:f,QCourier,>MKADDR
  1946.  
  1947. @Table Text@<+B><:f,QCourier,>MKDATE
  1948.  
  1949. @Table Text@<+B><:f,QCourier,>MODEM
  1950.  
  1951. @Table Text@<+B><:f,QCourier,>MONTH
  1952.  
  1953. @Table Text@<+B><:f,QCourier,>NOCHAR
  1954.  
  1955. @Table Text@<+B><:f,QCourier,>NOT
  1956.  
  1957. @Table Text@<+B><:f,QCourier,>ONLOCAL
  1958.  
  1959. @Table Text@<+B><:f,QCourier,>OR
  1960.  
  1961. @Table Text@<+B><:f,QCourier,>PAGESTAT
  1962.  
  1963. @Table Text@<+B><:f,QCourier,>PCBDAT
  1964.  
  1965. @Table Text@<+B><:f,QCourier,>PCBNODE
  1966.  
  1967. @Table Text@<+B><:f,QCourier,>PEEKB
  1968.  
  1969. @Table Text@<+B><:f,QCourier,>PEEKDW
  1970.  
  1971. @Table Text@<+B><:f,QCourier,>PEEKW
  1972.  
  1973. @Table Text@<+B><:f,QCourier,>PPENAME
  1974.  
  1975. @Table Text@<+B><:f,QCourier,>PPEPATH
  1976.  
  1977. @Table Text@<+B><:f,QCourier,>PSA
  1978.  
  1979. @Table Text@<+B><:f,QCourier,>RANDOM
  1980.  
  1981. @Table Text@<+B><:f,QCourier,>READLINE
  1982.  
  1983. @Table Text@<+B><:f,QCourier,>REGAH
  1984.  
  1985. @Table Text@<+B><:f,QCourier,>REGAL
  1986.  
  1987. @Table Text@<+B><:f,QCourier,>REGAX
  1988.  
  1989. @Table Text@<+B><:f,QCourier,>REGBH
  1990.  
  1991. @Table Text@<+B><:f,QCourier,>REGBL
  1992.  
  1993. @Table Text@<+B><:f,QCourier,>REGBX
  1994.  
  1995. @Table Text@<+B><:f,QCourier,>REGCF
  1996.  
  1997. @Table Text@<+B><:f,QCourier,>REGCH
  1998.  
  1999. @Table Text@<+B><:f,QCourier,>REGCL
  2000.  
  2001. @Table Text@<+B><:f,QCourier,>REGCX
  2002.  
  2003. @Table Text@<+B><:f,QCourier,>REGDH
  2004.  
  2005. @Table Text@<+B><:f,QCourier,>REGDI
  2006.  
  2007. @Table Text@<+B><:f,QCourier,>REGDL
  2008.  
  2009. @Table Text@<+B><:f,QCourier,>REGDS
  2010.  
  2011. @Table Text@<+B><:f,QCourier,>REGDX
  2012.  
  2013. @Table Text@<+B><:f,QCourier,>REGES
  2014.  
  2015. @Table Text@<+B><:f,QCourier,>REGF
  2016.  
  2017. @Table Text@<+B><:f,QCourier,>REGSI
  2018.  
  2019. @Table Text@<+B><:f,QCourier,>REPLACE
  2020.  
  2021. @Table Text@<+B><:f,QCourier,>RIGHT
  2022.  
  2023. @Table Text@<+B><:f,QCourier,>RTRIM
  2024.  
  2025. @Table Text@<+B><:f,QCourier,>S2I
  2026.  
  2027. @Table Text@<+B><:f,QCourier,>SCRTEXT
  2028.  
  2029. @Table Text@<+B><:f,QCourier,>SEC
  2030.  
  2031. @Table Text@<+B><:f,QCourier,>SHOWSTAT
  2032.  
  2033. @Table Text@<+B><:f,QCourier,>SLPATH
  2034.  
  2035. @Table Text@<+B><:f,QCourier,>SPACE
  2036.  
  2037. @Table Text@<+B><:f,QCourier,>STRING
  2038.  
  2039. @Table Text@<+B><:f,QCourier,>STRIP
  2040.  
  2041. @Table Text@<+B><:f,QCourier,>STRIPATX
  2042.  
  2043. @Table Text@<+B><:f,QCourier,>SYSOPSEC
  2044.  
  2045. @Table Text@<+B><:f,QCourier,>TEMPPATH
  2046.  
  2047. @Table Text@<+B><:f,QCourier,>TIME
  2048.  
  2049. @Table Text@<+B><:f,QCourier,>TIMEAP
  2050.  
  2051. @Table Text@<+B><:f,QCourier,>TOKCOUNT
  2052.  
  2053. @Table Text@<+B><:f,QCourier,>TOKENSTR
  2054.  
  2055. @Table Text@<+B><:f,QCourier,>TRIM
  2056.  
  2057. @Table Text@<+B><:f,QCourier,>UPPER
  2058.  
  2059. @Table Text@<+B><:f,QCourier,>UN_CITY
  2060.  
  2061. @Table Text@<+B><:f,QCourier,>UN_NAME
  2062.  
  2063. @Table Text@<+B><:f,QCourier,>UN_OPER
  2064.  
  2065. @Table Text@<+B><:f,QCourier,>UN_STAT
  2066.  
  2067. @Table Text@<+B><:f,QCourier,>U_BDL
  2068.  
  2069. @Table Text@<+B><:f,QCourier,>U_BDLDAY
  2070.  
  2071. @Table Text@<+B><:f,QCourier,>U_BUL
  2072.  
  2073. @Table Text@<+B><:f,QCourier,>U_FDL
  2074.  
  2075. @Table Text@<+B><:f,QCourier,>U_FUL
  2076.  
  2077. @Table Text@<+B><:f,QCourier,>U_INCONF
  2078.  
  2079. @Table Text@<+B><:f,QCourier,>U_LDATE
  2080.  
  2081. @Table Text@<+B><:f,QCourier,>U_LDIR
  2082.  
  2083. @Table Text@<+B><:f,QCourier,>U_LOGONS
  2084.  
  2085. @Table Text@<+B><:f,QCourier,>U_LTIME
  2086.  
  2087. @Table Text@<+B><:f,QCourier,>U_MSGRD
  2088.  
  2089. @Table Text@<+B><:f,QCourier,>U_MSGWR
  2090.  
  2091. @Table Text@<+B><:f,QCourier,>U_NAME
  2092.  
  2093. @Table Text@<+B><:f,QCourier,>U_PWDHIST
  2094.  
  2095. @Table Text@<+B><:f,QCourier,>U_PWDLC
  2096.  
  2097. @Table Text@<+B><:f,QCourier,>U_PWDTC
  2098.  
  2099. @Table Text@<+B><:f,QCourier,>U_RECNUM
  2100.  
  2101. @Table Text@<+B><:f,QCourier,>U_STAT
  2102.  
  2103. @Table Text@<+B><:f,QCourier,>U_TIMEON
  2104.  
  2105. @Table Text@<+B><:f,QCourier,>VALCC
  2106.  
  2107. @Table Text@<+B><:f,QCourier,>VALDATE
  2108.  
  2109. @Table Text@<+B><:f,QCourier,>VALTIME
  2110.  
  2111. @Table Text@<+B><:f,QCourier,>VER
  2112.  
  2113. @Table Text@<+B><:f,QCourier,>XOR
  2114.  
  2115. @Table Text@<+B><:f,QCourier,>YEAR
  2116.  
  2117. @Table Text@<+B><:f,QCourier,>YESCHAR<:f>
  2118.  
  2119. @Table Text@
  2120. >
  2121. [frm]
  2122.     11
  2123.     721472
  2124.     3410
  2125.     7755
  2126.     10610
  2127.     8235
  2128.     1
  2129.     1
  2130.     1
  2131.     1 0 0 100 100 10 0
  2132.     0
  2133.     16777215
  2134.     16
  2135.     6
  2136.     2060
  2137.     7200 1530
  2138.     [frmname]
  2139.         Frame20
  2140.     [frmlay]
  2141.         8235
  2142.         7200
  2143.         1
  2144.         0
  2145.         0
  2146.         1
  2147.         7755
  2148.         0
  2149.         2
  2150.         1
  2151.         0
  2152.         1
  2153.         1
  2154.         0
  2155.         3
  2156.         3426
  2157.         5655
  2158.         0
  2159.         5895
  2160.         8124
  2161.         0
  2162.         8364
  2163.         10594
  2164.         0
  2165.     [txt]
  2166. @Table Text@<+B><:f,QCourier,>BOOLEAN
  2167.  
  2168. @Table Text@<+B><:f,QCourier,>DATE
  2169.  
  2170. @Table Text@<+B><:f,QCourier,>INTEGER
  2171.  
  2172. @Table Text@<+B><:f,QCourier,>MONEY
  2173.  
  2174. @Table Text@<+B><:f,QCourier,>STRING
  2175.  
  2176. @Table Text@<+B><:f,QCourier,>TIME<:f>
  2177.  
  2178. @Table Text@<+B><:f,QCourier,>
  2179.  
  2180. >
  2181. [frm]
  2182.     11
  2183.     721472
  2184.     3410
  2185.     9050
  2186.     10610
  2187.     10175
  2188.     1
  2189.     1
  2190.     1
  2191.     1 0 0 100 100 10 0
  2192.     0
  2193.     16777215
  2194.     15
  2195.     7
  2196.     2060
  2197.     7200 480
  2198.     [frmname]
  2199.         Frame20
  2200.     [frmlay]
  2201.         10175
  2202.         7200
  2203.         1
  2204.         0
  2205.         0
  2206.         1
  2207.         9050
  2208.         0
  2209.         2
  2210.         1
  2211.         0
  2212.         1
  2213.         1
  2214.         0
  2215.         5
  2216.         3436
  2217.         4673
  2218.         0
  2219.         4913
  2220.         6150
  2221.         0
  2222.         6390
  2223.         7627
  2224.         0
  2225.         7867
  2226.         9104
  2227.         0
  2228.         9344
  2229.         10584
  2230.         0
  2231.     [txt]
  2232. @Table Text@<+B><:f,QCourier,>U_CLS
  2233.  
  2234. @Table Text@<+B><:f,QCourier,>U_DEF79
  2235.  
  2236. @Table Text@<+B><:f,QCourier,>U_EXPERT
  2237.  
  2238. @Table Text@<+B><:f,QCourier,>U_FSE
  2239.  
  2240. @Table Text@<+B><:f,QCourier,>U_FSEP
  2241.  
  2242. @Table Text@<+B><:f,QCourier,>U_LONGHDR
  2243.  
  2244. @Table Text@<+B><:f,QCourier,>U_SCROLL
  2245.  
  2246. @Table Text@<+B><:f,QCourier,>U_EXPDATE
  2247.  
  2248. @Table Text@<+B><:f,QCourier,>U_PWDEXP
  2249.  
  2250. @Table Text@<+B><:f,QCourier,>U_EXPSEC
  2251.  
  2252. @Table Text@<+B><:f,QCourier,>U_PAGELEN
  2253.  
  2254. @Table Text@<+B><:f,QCourier,>U_SEC
  2255.  
  2256. @Table Text@<+B><:f,QCourier,>U_ADDR(5)
  2257.  
  2258. @Table Text@<+B><:f,QCourier,>U_ALIAS
  2259.  
  2260. @Table Text@<+B><:f,QCourier,>U_BDPHONE
  2261.  
  2262. @Table Text@<+B><:f,QCourier,>U_CITY
  2263.  
  2264. @Table Text@<+B><:f,QCourier,>U_CMNT1
  2265.  
  2266. @Table Text@<+B><:f,QCourier,>U_CMNT2
  2267.  
  2268. @Table Text@<+B><:f,QCourier,>U_HVPHONE
  2269.  
  2270. @Table Text@<+B><:f,QCourier,>U_NOTES(4)
  2271.  
  2272. @Table Text@<+B><:f,QCourier,>U_PWD
  2273.  
  2274. @Table Text@<+B><:f,QCourier,>U_TRANS
  2275.  
  2276. @Table Text@<+B><:f,QCourier,>U_VER<:f>
  2277.  
  2278. @Table Text@<+B><:f,QCourier,>
  2279.  
  2280. >
  2281. [frm]
  2282.     5
  2283.     721472
  2284.     2360
  2285.     1656
  2286.     9560
  2287.     7740
  2288.     1
  2289.     1
  2290.     1
  2291.     1 0 0 100 100 10 0
  2292.     0
  2293.     16777215
  2294.     14
  2295.     8
  2296.     1910
  2297.     7200 6084
  2298.     [frmname]
  2299.         Frame21
  2300.     [frmlay]
  2301.         7740
  2302.         7200
  2303.         1
  2304.         0
  2305.         0
  2306.         1
  2307.         1656
  2308.         0
  2309.         2
  2310.         1
  2311.         0
  2312.         1
  2313.         1
  2314.         0
  2315.         5
  2316.         2460
  2317.         3665
  2318.         0
  2319.         3905
  2320.         5110
  2321.         0
  2322.         5350
  2323.         6555
  2324.         0
  2325.         6795
  2326.         8000
  2327.         0
  2328.         8240
  2329.         9460
  2330.         0
  2331.     [txt]
  2332. @Table Text@<+B><:f,QCourier,>ABORT
  2333.  
  2334. @Table Text@<+B><:f,QCourier,>ABS
  2335.  
  2336. @Table Text@<+B><:f,QCourier,>AND
  2337.  
  2338. @Table Text@<+B><:f,QCourier,>ANSION
  2339.  
  2340. @Table Text@<+B><:f,QCourier,>ASC
  2341.  
  2342. @Table Text@<+B><:f,QCourier,>B2W
  2343.  
  2344. @Table Text@<+B><:f,QCourier,>CALLID
  2345.  
  2346. @Table Text@<+B><:f,QCourier,>CALLNUM
  2347.  
  2348. @Table Text@<+B><:f,QCourier,>CARRIER
  2349.  
  2350. @Table Text@<+B><:f,QCourier,>CCTYPE
  2351.  
  2352. @Table Text@<+B><:f,QCourier,>CDON
  2353.  
  2354. @Table Text@<+B><:f,QCourier,>CHR
  2355.  
  2356. @Table Text@<+B><:f,QCourier,>CURCOLOR
  2357.  
  2358. @Table Text@<+B><:f,QCourier,>CURCONF
  2359.  
  2360. @Table Text@<+B><:f,QCourier,>CURSEC
  2361.  
  2362. @Table Text@<+B><:f,QCourier,>DATE
  2363.  
  2364. @Table Text@<+B><:f,QCourier,>DAY
  2365.  
  2366. @Table Text@<+B><:f,QCourier,>DBGLEVEL
  2367.  
  2368. @Table Text@<+B><:f,QCourier,>DEFCOLOR
  2369.  
  2370. @Table Text@<+B><:f,QCourier,>DOW
  2371.  
  2372. @Table Text@<+B><:f,QCourier,>EXIST
  2373.  
  2374. @Table Text@<+B><:f,QCourier,>FERR
  2375.  
  2376. @Table Text@<+B><:f,QCourier,>FILEINF
  2377.  
  2378. @Table Text@<+B><:f,QCourier,>FMTCC
  2379.  
  2380. @Table Text@<+B><:f,QCourier,>GETENV
  2381.  
  2382. @Table Text@<+B><:f,QCourier,>GETTOKEN
  2383.  
  2384. @Table Text@<+B><:f,QCourier,>GETX
  2385.  
  2386. @Table Text@<+B><:f,QCourier,>GETY
  2387.  
  2388. @Table Text@<+B><:f,QCourier,>GRAFMODE
  2389.  
  2390. @Table Text@<+B><:f,QCourier,>HELPPATH
  2391.  
  2392. @Table Text@<+B><:f,QCourier,>HOUR
  2393.  
  2394. @Table Text@<+B><:f,QCourier,>I2S
  2395.  
  2396. @Table Text@<+B><:f,QCourier,>INKEY
  2397.  
  2398. @Table Text@<+B><:f,QCourier,>INSTR
  2399.  
  2400. @Table Text@<+B><:f,QCourier,>KINKEY
  2401.  
  2402. @Table Text@<+B><:f,QCourier,>LANGEXT
  2403.  
  2404. @Table Text@<+B><:f,QCourier,>LEFT
  2405.  
  2406. @Table Text@<+B><:f,QCourier,>LEN
  2407.  
  2408. @Table Text@<+B><:f,QCourier,>LOGGEDON
  2409.  
  2410. @Table Text@<+B><:f,QCourier,>LOWER
  2411.  
  2412. @Table Text@<+B><:f,QCourier,>LTRIM
  2413.  
  2414. @Table Text@<+B><:f,QCourier,>MASK_ALNUM
  2415.  
  2416. @Table Text@<+B><:f,QCourier,>MASK_ALPHA
  2417.  
  2418. @Table Text@<+B><:f,QCourier,>MASK_ASCII
  2419.  
  2420. @Table Text@<+B><:f,QCourier,>MASK_FILE
  2421.  
  2422. @Table Text@<+B><:f,QCourier,>MASK_NUM
  2423.  
  2424. @Table Text@<+B><:f,QCourier,>MASK_PATH
  2425.  
  2426. @Table Text@<+B><:f,QCourier,>MASK_PWD
  2427.  
  2428. @Table Text@<+B><:f,QCourier,>MAXNODE
  2429.  
  2430. @Table Text@<+B><:f,QCourier,>MGETBYTE
  2431.  
  2432. @Table Text@<+B><:f,QCourier,>MID
  2433.  
  2434. @Table Text@<+B><:f,QCourier,>MIN
  2435.  
  2436. @Table Text@<+B><:f,QCourier,>MINKEY
  2437.  
  2438. @Table Text@<+B><:f,QCourier,>MINLEFT
  2439.  
  2440. @Table Text@<+B><:f,QCourier,>MINON
  2441.  
  2442. @Table Text@<+B><:f,QCourier,>MKADDR
  2443.  
  2444. @Table Text@<+B><:f,QCourier,>MKDATE
  2445.  
  2446. @Table Text@<+B><:f,QCourier,>MODEM
  2447.  
  2448. @Table Text@<+B><:f,QCourier,>MONTH
  2449.  
  2450. @Table Text@<+B><:f,QCourier,>NOCHAR
  2451.  
  2452. @Table Text@<+B><:f,QCourier,>NOT
  2453.  
  2454. @Table Text@<+B><:f,QCourier,>ONLOCAL
  2455.  
  2456. @Table Text@<+B><:f,QCourier,>OR
  2457.  
  2458. @Table Text@<+B><:f,QCourier,>PAGESTAT
  2459.  
  2460. @Table Text@<+B><:f,QCourier,>PCBDAT
  2461.  
  2462. @Table Text@<+B><:f,QCourier,>PCBNODE
  2463.  
  2464. @Table Text@<+B><:f,QCourier,>PEEKB
  2465.  
  2466. @Table Text@<+B><:f,QCourier,>PEEKDW
  2467.  
  2468. @Table Text@<+B><:f,QCourier,>PEEKW
  2469.  
  2470. @Table Text@<+B><:f,QCourier,>PPENAME
  2471.  
  2472. @Table Text@<+B><:f,QCourier,>PPEPATH
  2473.  
  2474. @Table Text@<+B><:f,QCourier,>PSA
  2475.  
  2476. @Table Text@<+B><:f,QCourier,>RANDOM
  2477.  
  2478. @Table Text@<+B><:f,QCourier,>READLINE
  2479.  
  2480. @Table Text@<+B><:f,QCourier,>REGAH
  2481.  
  2482. @Table Text@<+B><:f,QCourier,>REGAL
  2483.  
  2484. @Table Text@<+B><:f,QCourier,>REGAX
  2485.  
  2486. @Table Text@<+B><:f,QCourier,>REGBH
  2487.  
  2488. @Table Text@<+B><:f,QCourier,>REGBL
  2489.  
  2490. @Table Text@<+B><:f,QCourier,>REGBX
  2491.  
  2492. @Table Text@<+B><:f,QCourier,>REGCF
  2493.  
  2494. @Table Text@<+B><:f,QCourier,>REGCH
  2495.  
  2496. @Table Text@<+B><:f,QCourier,>REGCL
  2497.  
  2498. @Table Text@<+B><:f,QCourier,>REGCX
  2499.  
  2500. @Table Text@<+B><:f,QCourier,>REGDH
  2501.  
  2502. @Table Text@<+B><:f,QCourier,>REGDI
  2503.  
  2504. @Table Text@<+B><:f,QCourier,>REGDL
  2505.  
  2506. @Table Text@<+B><:f,QCourier,>REGDS
  2507.  
  2508. @Table Text@<+B><:f,QCourier,>REGDX
  2509.  
  2510. @Table Text@<+B><:f,QCourier,>REGES
  2511.  
  2512. @Table Text@<+B><:f,QCourier,>REGF
  2513.  
  2514. @Table Text@<+B><:f,QCourier,>REGSI
  2515.  
  2516. @Table Text@<+B><:f,QCourier,>REPLACE
  2517.  
  2518. @Table Text@<+B><:f,QCourier,>RIGHT
  2519.  
  2520. @Table Text@<+B><:f,QCourier,>RTRIM
  2521.  
  2522. @Table Text@<+B><:f,QCourier,>S2I
  2523.  
  2524. @Table Text@<+B><:f,QCourier,>SCRTEXT
  2525.  
  2526. @Table Text@<+B><:f,QCourier,>SEC
  2527.  
  2528. @Table Text@<+B><:f,QCourier,>SHOWSTAT
  2529.  
  2530. @Table Text@<+B><:f,QCourier,>SLPATH
  2531.  
  2532. @Table Text@<+B><:f,QCourier,>SPACE
  2533.  
  2534. @Table Text@<+B><:f,QCourier,>STRING
  2535.  
  2536. @Table Text@<+B><:f,QCourier,>STRIP
  2537.  
  2538. @Table Text@<+B><:f,QCourier,>STRIPATX
  2539.  
  2540. @Table Text@<+B><:f,QCourier,>SYSOPSEC
  2541.  
  2542. @Table Text@<+B><:f,QCourier,>TEMPPATH
  2543.  
  2544. @Table Text@<+B><:f,QCourier,>TIME
  2545.  
  2546. @Table Text@<+B><:f,QCourier,>TIMEAP
  2547.  
  2548. @Table Text@<+B><:f,QCourier,>TOKCOUNT
  2549.  
  2550. @Table Text@<+B><:f,QCourier,>TOKENSTR
  2551.  
  2552. @Table Text@<+B><:f,QCourier,>TRIM
  2553.  
  2554. @Table Text@<+B><:f,QCourier,>UPPER
  2555.  
  2556. @Table Text@<+B><:f,QCourier,>UN_CITY
  2557.  
  2558. @Table Text@<+B><:f,QCourier,>UN_NAME
  2559.  
  2560. @Table Text@<+B><:f,QCourier,>UN_OPER
  2561.  
  2562. @Table Text@<+B><:f,QCourier,>UN_STAT
  2563.  
  2564. @Table Text@<+B><:f,QCourier,>U_BDL
  2565.  
  2566. @Table Text@<+B><:f,QCourier,>U_BDLDAY
  2567.  
  2568. @Table Text@<+B><:f,QCourier,>U_BUL
  2569.  
  2570. @Table Text@<+B><:f,QCourier,>U_FDL
  2571.  
  2572. @Table Text@<+B><:f,QCourier,>U_FUL
  2573.  
  2574. @Table Text@<+B><:f,QCourier,>U_INCONF
  2575.  
  2576. @Table Text@<+B><:f,QCourier,>U_LDATE
  2577.  
  2578. @Table Text@<+B><:f,QCourier,>U_LDIR
  2579.  
  2580. @Table Text@<+B><:f,QCourier,>U_LOGONS
  2581.  
  2582. @Table Text@<+B><:f,QCourier,>U_LTIME
  2583.  
  2584. @Table Text@<+B><:f,QCourier,>U_MSGRD
  2585.  
  2586. @Table Text@<+B><:f,QCourier,>U_MSGWR
  2587.  
  2588. @Table Text@<+B><:f,QCourier,>U_NAME
  2589.  
  2590. @Table Text@<+B><:f,QCourier,>U_PWDHIST
  2591.  
  2592. @Table Text@<+B><:f,QCourier,>U_PWDLC
  2593.  
  2594. @Table Text@<+B><:f,QCourier,>U_PWDTC
  2595.  
  2596. @Table Text@<+B><:f,QCourier,>U_RECNUM
  2597.  
  2598. @Table Text@<+B><:f,QCourier,>U_STAT
  2599.  
  2600. @Table Text@<+B><:f,QCourier,>U_TIMEON
  2601.  
  2602. @Table Text@<+B><:f,QCourier,>VALCC
  2603.  
  2604. @Table Text@<+B><:f,QCourier,>VALDATE
  2605.  
  2606. @Table Text@<+B><:f,QCourier,>VALTIME
  2607.  
  2608. @Table Text@<+B><:f,QCourier,>VER
  2609.  
  2610. @Table Text@<+B><:f,QCourier,>XOR
  2611.  
  2612. @Table Text@<+B><:f,QCourier,>YEAR
  2613.  
  2614. @Table Text@<+B><:f,QCourier,>YESCHAR<:f>
  2615.  
  2616. @Table Text@
  2617. >
  2618. [frm]
  2619.     5
  2620.     721472
  2621.     3410
  2622.     2664
  2623.     10610
  2624.     4389
  2625.     1
  2626.     1
  2627.     1
  2628.     1 0 0 100 100 10 0
  2629.     0
  2630.     16777215
  2631.     13
  2632.     9
  2633.     2060
  2634.     7200 1725
  2635.     [frmname]
  2636.         Frame21
  2637.     [frmlay]
  2638.         4389
  2639.         7200
  2640.         1
  2641.         0
  2642.         0
  2643.         1
  2644.         2664
  2645.         0
  2646.         2
  2647.         1
  2648.         0
  2649.         1
  2650.         1
  2651.         0
  2652.         5
  2653.         3445
  2654.         4677
  2655.         0
  2656.         4917
  2657.         6149
  2658.         0
  2659.         6389
  2660.         7621
  2661.         0
  2662.         7861
  2663.         9093
  2664.         0
  2665.         9333
  2666.         10575
  2667.         0
  2668.     [txt]
  2669. @Table Text@<+B><:f,QCourier,>AUTO
  2670.  
  2671. @Table Text@<+B><:f,QCourier,>BELL
  2672.  
  2673. @Table Text@<+B><:f,QCourier,>DEFS
  2674.  
  2675. @Table Text@<+B><:f,QCourier,>ECHODOTS
  2676.  
  2677. @Table Text@<+B><:f,QCourier,>ERASELINE
  2678.  
  2679. @Table Text@<+B><:f,QCourier,>FALSE
  2680.  
  2681. @Table Text@<+B><:f,QCourier,>FCL
  2682.  
  2683. @Table Text@<+B><:f,QCourier,>FIELDLEN
  2684.  
  2685. @Table Text@<+B><:f,QCourier,>FNS
  2686.  
  2687. @Table Text@<+B><:f,QCourier,>F_EXP
  2688.  
  2689. @Table Text@<+B><:f,QCourier,>F_MW
  2690.  
  2691. @Table Text@<+B><:f,QCourier,>F_REG
  2692.  
  2693. @Table Text@<+B><:f,QCourier,>F_SEL
  2694.  
  2695. @Table Text@<+B><:f,QCourier,>F_SYS
  2696.  
  2697. @Table Text@<+B><:f,QCourier,>GRAPH
  2698.  
  2699. @Table Text@<+B><:f,QCourier,>GUIDE
  2700.  
  2701. @Table Text@<+B><:f,QCourier,>HIGHASCII
  2702.  
  2703. @Table Text@<+B><:f,QCourier,>LANG
  2704.  
  2705. @Table Text@<+B><:f,QCourier,>LFAFTER
  2706.  
  2707. @Table Text@<+B><:f,QCourier,>LFBEFORE
  2708.  
  2709. @Table Text@<+B><:f,QCourier,>LOGIT
  2710.  
  2711. @Table Text@<+B><:f,QCourier,>LOGITLEFT
  2712.  
  2713. @Table Text@<+B><:f,QCourier,>NC
  2714.  
  2715. @Table Text@<+B><:f,QCourier,>NEWLINE
  2716.  
  2717. @Table Text@<+B><:f,QCourier,>NOCLEAR
  2718.  
  2719. @Table Text@<+B><:f,QCourier,>O_RD
  2720.  
  2721. @Table Text@<+B><:f,QCourier,>O_RW
  2722.  
  2723. @Table Text@<+B><:f,QCourier,>O_WR
  2724.  
  2725. @Table Text@<+B><:f,QCourier,>SEC
  2726.  
  2727. @Table Text@<+B><:f,QCourier,>STACKED
  2728.  
  2729. @Table Text@<+B><:f,QCourier,>S_DB
  2730.  
  2731. @Table Text@<+B><:f,QCourier,>S_DN
  2732.  
  2733. @Table Text@<+B><:f,QCourier,>S_DR
  2734.  
  2735. @Table Text@<+B><:f,QCourier,>S_DW
  2736.  
  2737. @Table Text@<+B><:f,QCourier,>TRUE
  2738.  
  2739. @Table Text@<+B><:f,QCourier,>UPCASE
  2740.  
  2741. @Table Text@<+B><:f,QCourier,>WORDWRAP
  2742.  
  2743. @Table Text@<+B><:f,QCourier,>YESNO<:f>
  2744.  
  2745. @Table Text@
  2746. >
  2747. [lay]
  2748.     Standard
  2749.     1031
  2750.     [rght]
  2751.         12960
  2752.         11160
  2753.         1
  2754.         1350
  2755.         864
  2756.         1
  2757.         1656
  2758.         450
  2759.         0
  2760.         1
  2761.         0
  2762.         1
  2763.         0
  2764.         2
  2765.         1
  2766.         1350
  2767.         10710
  2768.         12
  2769.         1
  2770.         720
  2771.         1
  2772.         1440
  2773.         1
  2774.         2160
  2775.         1
  2776.         2880
  2777.         1
  2778.         3600
  2779.         1
  2780.         4320
  2781.         1
  2782.         5040
  2783.         1
  2784.         5760
  2785.         1
  2786.         6480
  2787.         1
  2788.         7200
  2789.         1
  2790.         7920
  2791.         1
  2792.         8640
  2793.     [lft]
  2794.         12960
  2795.         11160
  2796.         1
  2797.         450
  2798.         864
  2799.         1
  2800.         1656
  2801.         1350
  2802.         0
  2803.         1
  2804.         0
  2805.         1
  2806.         0
  2807.         2
  2808.         1
  2809.         450
  2810.         9810
  2811.         12
  2812.         1
  2813.         720
  2814.         1
  2815.         1440
  2816.         1
  2817.         2160
  2818.         1
  2819.         2880
  2820.         1
  2821.         3600
  2822.         1
  2823.         4320
  2824.         1
  2825.         5040
  2826.         1
  2827.         5760
  2828.         1
  2829.         6480
  2830.         1
  2831.         7200
  2832.         1
  2833.         7920
  2834.         1
  2835.         8640
  2836.     [hlft]
  2837.     [lyfrm]
  2838.         1
  2839.         3008
  2840.         0
  2841.         0
  2842.         11160
  2843.         1656
  2844.         0
  2845.         1
  2846.         3
  2847.         1 0 0 0 0 0 0
  2848.         0
  2849.         0
  2850.         3
  2851.     [frmlay]
  2852.         1656
  2853.         11160
  2854.         1
  2855.         720
  2856.         360
  2857.         1
  2858.         792
  2859.         1080
  2860.         0
  2861.         1
  2862.         0
  2863.         1
  2864.         1
  2865.         0
  2866.         1
  2867.         720
  2868.         10080
  2869.         2
  2870.         2
  2871.         4680
  2872.         3
  2873.         9360
  2874.     [txt]
  2875. >
  2876.     [hrght]
  2877.     [lyfrm]
  2878.         1
  2879.         11200
  2880.         0
  2881.         0
  2882.         11160
  2883.         1656
  2884.         0
  2885.         1
  2886.         3
  2887.         1 0 0 0 0 0 0
  2888.         0
  2889.         0
  2890.         1
  2891.     [frmlay]
  2892.         1656
  2893.         11160
  2894.         1
  2895.         1080
  2896.         360
  2897.         1
  2898.         792
  2899.         720
  2900.         0
  2901.         1
  2902.         0
  2903.         1
  2904.         1
  2905.         0
  2906.         1
  2907.         1080
  2908.         10440
  2909.         2
  2910.         2
  2911.         4680
  2912.         3
  2913.         9360
  2914.     [txt]
  2915.  
  2916. >
  2917.     [flft]
  2918.     [lyfrm]
  2919.         1
  2920.         5056
  2921.         0
  2922.         12096
  2923.         11160
  2924.         12960
  2925.         0
  2926.         1
  2927.         3
  2928.         1 0 0 0 0 0 0
  2929.         0
  2930.         0
  2931.         4
  2932.     [frmlay]
  2933.         12960
  2934.         11160
  2935.         1
  2936.         720
  2937.         360
  2938.         1
  2939.         12312
  2940.         1080
  2941.         0
  2942.         1
  2943.         0
  2944.         1
  2945.         1
  2946.         0
  2947.         1
  2948.         720
  2949.         10080
  2950.         2
  2951.         2
  2952.         4680
  2953.         3
  2954.         9360
  2955.     [txt]
  2956. >
  2957.     [frght]
  2958.     [lyfrm]
  2959.         1
  2960.         13248
  2961.         0
  2962.         12096
  2963.         11160
  2964.         12960
  2965.         0
  2966.         1
  2967.         3
  2968.         1 0 0 0 0 0 0
  2969.         0
  2970.         0
  2971.         2
  2972.     [frmlay]
  2973.         12960
  2974.         11160
  2975.         1
  2976.         1080
  2977.         360
  2978.         1
  2979.         12312
  2980.         720
  2981.         0
  2982.         1
  2983.         0
  2984.         1
  2985.         1
  2986.         0
  2987.         1
  2988.         1080
  2989.         10440
  2990.         2
  2991.         2
  2992.         4680
  2993.         3
  2994.         9360
  2995.     [txt]
  2996. >
  2997. [elay]
  2998. [l1]
  2999.     0
  3000. [pg]
  3001.     311
  3002.     10 0 15 32 1 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3003.     14 491 40 32 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3004.     17 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3005.     30 81 50 32 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3006.     35 91 98 32 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3007.     46 0 18 0 0 1 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3008.     58 185 76 0 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3009.     73 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3010.     78 0 0 32 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3011.     80 0 0 32 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3012.     87 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3013.     94 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3014.     109 0 9 512 3 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3015.     126 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3016.     139 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3017.     155 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3018.     170 0 9 512 3 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3019.     184 0 9 512 3 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3020.     199 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3021.     211 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3022.     227 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3023.     240 0 9 512 3 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3024.     252 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3025.     265 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3026.     280 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3027.     295 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3028.     308 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3029.     321 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3030.     336 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3031.     351 0 9 512 3 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3032.     366 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3033.     382 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3034.     395 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3035.     408 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3036.     423 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3037.     436 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3038.     451 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3039.     464 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3040.     477 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3041.     490 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3042.     503 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3043.     517 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3044.     531 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3045.     545 0 4 0 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3046.     546 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3047.     561 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3048.     576 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3049.     591 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3050.     606 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3051.     621 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3052.     634 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3053.     649 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3054.     662 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3055.     675 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3056.     690 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3057.     702 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3058.     715 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3059.     728 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3060.     741 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3061.     754 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3062.     768 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3063.     781 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3064.     795 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3065.     809 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3066.     824 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3067.     837 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3068.     850 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3069.     862 0 9 512 3 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3070.     875 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3071.     887 0 9 512 3 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3072.     902 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3073.     914 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3074.     930 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3075.     942 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3076.     955 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3077.     971 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3078.     986 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3079.     1000 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3080.     1012 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3081.     1035 209 38 0 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3082.     1038 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3083.     1053 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3084.     1065 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3085.     1081 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3086.     1097 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3087.     1110 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3088.     1124 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3089.     1139 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3090.     1152 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3091.     1165 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3092.     1177 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3093.     1189 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3094.     1201 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3095.     1213 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3096.     1225 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3097.     1240 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3098.     1253 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3099.     1268 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3100.     1281 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3101.     1296 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3102.     1311 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3103.     1324 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3104.     1337 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3105.     1350 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3106.     1365 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3107.     1377 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3108.     1389 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3109.     1402 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3110.     1417 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3111.     1429 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3112.     1444 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3113.     1460 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3114.     1472 0 8 0 1 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3115.     1474 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3116.     1487 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3117.     1502 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3118.     1517 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3119.     1534 266 23 0 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3120.     1537 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3121.     1554 0 115 0 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3122.     1555 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3123.     1572 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3124.     1588 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3125.     1603 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3126.     1616 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3127.     1629 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3128.     1642 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3129.     1655 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3130.     1668 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3131.     1683 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3132.     1695 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3133.     1710 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3134.     1726 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3135.     1741 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3136.     1755 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3137.     1767 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3138.     1779 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3139.     1793 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3140.     1808 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3141.     1820 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3142.     1832 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3143.     1847 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3144.     1863 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3145.     1879 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3146.     1894 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3147.     1915 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3148.     1930 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3149.     1947 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3150.     1962 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3151.     1977 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3152.     1992 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3153.     2007 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3154.     2023 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3155.     2040 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3156.     2055 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3157.     2070 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3158.     2085 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3159.     2098 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3160.     2111 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3161.     2123 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3162.     2135 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3163.     2148 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3164.     2161 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3165.     2175 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3166.     2190 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3167.     2202 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3168.     2217 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3169.     2232 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3170.     2246 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3171.     2259 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3172.     2275 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3173.     2287 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3174.     2299 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3175.     2311 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3176.     2324 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3177.     2337 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3178.     2352 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3179.     2367 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3180.     2382 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3181.     2397 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3182.     2412 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3183.     2427 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3184.     2441 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3185.     2455 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3186.     2469 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3187.     2480 0 8 0 1 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3188.     2482 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3189.     2497 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3190.     2512 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3191.     2525 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3192.     2540 0 8 0 1 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3193.     2543 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3194.     2564 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3195.     2575 0 8 0 1 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3196.     2577 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3197.     2590 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3198.     2603 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3199.     2618 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3200.     2631 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3201.     2644 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3202.     2660 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3203.     2677 436 6 0 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3204.     2680 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3205.     2694 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3206.     2711 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3207.     2724 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3208.     2737 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3209.     2750 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3210.     2766 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3211.     2782 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3212.     2798 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3213.     2811 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3214.     2827 0 8 0 1 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3215.     2829 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3216.     2841 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3217.     2856 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3218.     2869 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3219.     2885 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3220.     2898 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3221.     2911 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3222.     2926 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3223.     2941 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3224.     2954 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3225.     2969 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3226.     2982 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3227.     2994 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3228.     3007 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3229.     3020 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3230.     3035 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3231.     3050 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3232.     3066 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3233.     3081 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3234.     3096 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3235.     3108 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3236.     3120 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3237.     3132 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3238.     3144 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3239.     3159 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3240.     3174 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3241.     3189 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3242.     3204 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3243.     3219 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3244.     3232 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3245.     3247 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3246.     3263 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3247.     3275 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3248.     3291 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3249.     3303 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3250.     3318 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3251.     3336 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3252.     3348 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3253.     3363 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3254.     3378 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3255.     3390 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3256.     3405 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3257.     3417 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3258.     3429 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3259.     3441 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3260.     3453 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3261.     3465 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3262.     3477 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3263.     3489 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3264.     3501 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3265.     3516 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3266.     3528 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3267.     3540 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3268.     3555 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3269.     3567 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3270.     3583 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3271.     3598 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3272.     3613 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3273.     3628 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3274.     3640 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3275.     3655 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3276.     3670 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3277.     3685 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3278.     3700 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3279.     3713 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3280.     3725 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3281.     3737 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3282.     3749 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3283.     3764 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3284.     3779 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3285.     3794 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3286.     3809 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3287.     3821 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3288.     3833 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3289.     3858 374 92 0 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3290.     3863 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3291.     3878 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3292.     3890 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3293.     3902 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3294.     3917 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3295.     3932 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3296.     3947 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3297.     3961 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3298.     3975 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3299.     3989 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3300.     4004 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3301.     4017 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3302.     4032 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3303.     4045 0 66 0 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3304.     4046 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3305.     4058 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3306.     4076 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3307.     4089 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3308.     4105 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3309.     4120 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3310.     4135 0 5 512 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3311.     4147 0 9 512 3 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3312.     4147 9 4 1025 0 0 0 65535 65535 Standard    65535 0 0    0 0 0 0 0 0 0 65535 0 0 65535 0 0 0 0 0
  3313. [edoc]
  3314. @Title@<+@><:#482,9360>PPL Structure
  3315.  
  3316. @Subhead@<:s><:#360,9360>Basics
  3317.  
  3318. <:s><:#1200,9360>A PPL program is created by a programmer with a standard text editor.  Each line consists of standard ASCII text (up to 2048 characters long) terminated with a carriage return/line feed pair.  Character case is not significant except in literal text strings
  3319. .  Three types of lines are recognized by the compiler:  comment lines, variable declaration statements and code statements.
  3320.  
  3321. @Small_Header@<:s><:#259,9360>Comments
  3322.  
  3323. <:#1440,9360>Comments are used by the PPL programmer to make notes in the source code about what the code is supposed to do and generally clarify things so that code maintenance is easier.  They are completely ignored by the PPL compiler so they may contain any text des
  3324. ired.  A comment may be on a line all by itself or at the end of a line after a valid statement.  A blank line is considered a comment.  Any text following a quote character (') or semi-colon (;) is also a comment.  The following are all valid comments:
  3325.  
  3326. @Example_Text@<:#948,9360>; This is a comment line<**>STRING buf, str, ssNum ' This is a comment too<**><**>' The blank line above this (as well as these<**>' lines) are all comments<**>CLS                    ; Yet *ANOTHER* comment!
  3327.  
  3328. @Small_Header@<:s><:#259,9360>Variable Declaration Statements
  3329.  
  3330. <:s><:#2165,9360>Variable declaration statements must start with a keyword denoting the variable type.  Valid type keywords are 
  3331. <+!>BOOLEAN<-!>, <+!>DATE<-!>, <+!>INTEGER<-!>, <+!>MONEY<-!>, <+!>STRING<-!> and 
  3332. <+!>TIME<-!>.  The keyword must be followed by one or more valid variable names (or array declarations) which should be separated by commas (,).  A valid variable name must start with a letter (A-Z) and may contain letters, numbers (0-9) and the underscore 
  3333. character (_).  Any number of characters may be used but only the first 32 will be recognized by PPL.  If the variable is an array then the name should be followed by an open parenthesis <[>(], one, two or three constant subscript expressions (separated by 
  3334. commas), and finally a closing parenthesis <[>)].  Here are some examples:
  3335.  
  3336. @Example_Text@<:#1106,9360><**>BOOLEAN adultFlag<**>DATE    this_IS_a_VARIABLE_to_HOLD_todays_DATE<**>; Only this_IS_a_VARIALBE_to_HOLD_today is significant<**>INTEGER age<**>MONEY   prices(2,5)<**>STRING  buf, labels(10), ssNum<**>TIME    start, stop
  3337.  
  3338. @Small_Header@<:s><:#259,9360>Code Statements
  3339.  
  3340. <:s><:#970,9360>Code declaration statements must start with a keyword indicating the operation or process to be performed.  There is one exception to this rule, however, and that is the 
  3341. <+!>LET<-!> statement.  If no keyword is found at the beginning of a line, a 
  3342. <+!>LET<-!> statement is implied and the rest of the line should follow the format:
  3343.  
  3344. @Example_Text@<:#158,9360>VAR = EXPRESSION
  3345.  
  3346. <:s><:#1440,9360>There are many statements defined in PPL and it is beyond the scope of this part of the manual to cover the precise syntax for each and every one of them.  Simply put, a statement takes zero, one or more expressions (see Expressions later in this section) a
  3347. nd/or variable names (see Variable Declaration Statements) as arguments (separated by commas), does something, using any passed expressions and/or variables, and assigning new values, as needed, to passed variables.  Here are a few sample statements:
  3348.  
  3349. @Example_Text@<:#2212,9360>' This statement clears the screen and takes no arguments<**>CLS<**><**>' Evaluates the single expression and assigns the result to ans<**>LET ans = 5+4*3/2-1<**><**>; Evaluates all three (could be more, could be less) expressions (two of<**>; which have on
  3350. ly one term) and prints them in order, following them<**>; with a carriage return<**>PRINTLN "The answer "+"is ",STRING(ans),"."<**><**>; Evaluate the expression on the left, display it, then get a string<**>; from the user and assign it to the variable nam
  3351. e on the left<**>INPUT "What is "+"your age",current_Age
  3352.  
  3353. Here are the valid statements accepted in PPL source code:<:A2>
  3354.  
  3355. <:#240,9360>
  3356.  
  3357. <:p<* >>
  3358.  
  3359. @Subhead@<:#360,9360>Expressions
  3360.  
  3361. <:s><:#1440,9360>An expression in PPL can take just about any form imaginable.  It consists of one or more constants, variables (see Variable Declaration Statements), functions (which take zero, one or more arguments), or sub-expressions, all of which are separated by PPL o
  3362. perators.  Although most statements and functions in PPL expect expressions of a specific type as arguments, you need not pass it an expression of the correct type; PPL will automatically convert from one type to another when it needs to.  Here are a few sa
  3363. mple expressions:
  3364.  
  3365. @Example_Text@<:#2686,9360>' Define a few variables to hold expression results<**>INTEGER i, j, k<**>STRING s, t, u<**><**>' Single term expressions<**>' (All expressions here are to the right of the =)<**>LET i = 2<**>LET j = 3<**>LET k = 4<**>LET s = "STRING"<**><**>' Complex expre
  3366. ssions<**>LET i = i*j*k+2*i+3*j+k/2-5<**>LET j = i*j*(k+2)*(i+3)*(j+k)/(2-5)<**>LET k = (RANDOM(5)+1)*5+ABS(j)<**>LET t = CHR(i%256)<**>LET u = s+" "+t
  3367.  
  3368. <:s><:#240,9360>
  3369.  
  3370. @Small_Header@<:s><:#259,9360>Constants
  3371.  
  3372. <:s><:#480,9360>PPL supports both user defined constants and pre-defined constants.  User defined constants may be any of the following:
  3373.  
  3374. @Indent_List@<:s><:#485,9360>    $#.##    A <+!>MONEY<-!> constant (dollar sign followed by optional dollars followed by decimal point followed by cents; # = 0-9)
  3375.  
  3376. @Indent_List@<:s><:#485,9360>    ##h    An <+!>INTEGER<-!> hexadecimal constant (a decimal digit followed by zero, one or more hexadecimal digits followed by an H; # = 0-9 & A-F)
  3377.  
  3378. @Indent_List@<:s><:#485,9360>    ##d    An <+!>INTEGER<-!> decimal constant (one or more decimal digits followed by a D; # = 0-9)
  3379.  
  3380. @Indent_List@<:s><:#485,9360>    ##o    An <+!>INTEGER<-!> octal constant (one or more octal digits followed by an O;<**># = 0-7)
  3381.  
  3382. @Indent_List@<:s><:#485,9360>    ##b    An <+!>INTEGER<-!> binary constant (one or more binary digits followed by a B;<**># = 0-1)
  3383.  
  3384. @Indent_List@<:s><:#485,9360>    +/-##    An <+!>INTEGER<-!> constant (an optional plus or minus sign followed by one or more decimal digits; # = 0-9)
  3385.  
  3386. @Indent_List@<:#485,9360>    "X"    A <+!>STRING<-!> constant (a double quote followed by displayable text followed by another double quote; X = any displayable text)
  3387.  
  3388. @Indent_List@<:s><:#485,9360>    @X##    An <+!>INTEGER<-!> @X constant (a commercial at sign followed by an X followed by two hexadecimal digits; # = 0-9 & A-F)
  3389.  
  3390. The following predefined constant labels are also available.  Their values and uses will be defined later.<:N733529525,SDR,65535,1,1
  3391. Need to replace this with the name of a section later that will have the constants defined.
  3392.  
  3393. >
  3394. <:A9>
  3395.  
  3396. <:#240,9360>
  3397.  
  3398. @Small_Header@<:#259,9360>Functions
  3399.  
  3400. PPL supports many functions which may be used by the programmer in expressions.  Here is a list of valid PPL functions.  As with the predefined constants, their return values and uses will be documented later.<:N733529767,SDR,65535,2,1
  3401. Refer them to the list of functions later.
  3402.  
  3403. >
  3404. <:A8>
  3405.  
  3406. <:#240,9360>
  3407.  
  3408. @Small_Header@<:#259,9360>Sub-Expressions
  3409.  
  3410. <:s><:#480,9360>A sub-expression is simply any valid PPL expression surrounded by parentheses.  For example, this is an expression:
  3411.  
  3412. @Example_Text@<:s><:#158,9360>7+6-5*4/3%2
  3413.  
  3414. <:s><:#240,9360>To make it into a sub-expression, surround it with parentheses like this:
  3415.  
  3416. @Example_Text@<:s><:#158,9360>(7+6-5*4/3%2)
  3417.  
  3418. <:s><:#240,9360>This sub-expression could be used in yet another expression:
  3419.  
  3420. @Example_Text@<:#158,9360>PRINTLN 2*(7+6-5*4/3%2)*RANDOM(4)
  3421.  
  3422. @Small_Header@<:s><:#259,9360>Operators
  3423.  
  3424. <:s><:#240,9360>PPL supports a full set of operators in addition to the functions listed previously.  They are:
  3425.  
  3426. @Indent_List@<:s><:#240,9360>    Operator    Function
  3427.  
  3428. @Indent_List@<:#480,9360>    <:f,QCourier,>(<:f>    Starts a sub-expression; requires a ) to terminate<**>Example:  
  3429. <:f160,QCourier,>3*<+!>(<-!>2+1)<:f>  (result is 9, not 7)
  3430.  
  3431. @Indent_List@<:#480,9360>    <:f,QCourier,>)<:f>    Ends a sub-expression<**>Example:  <:f160,QCourier,>3*(2+1<+!>)<-!><:f>  (result is 9, not 7)
  3432.  
  3433. @Indent_List@<:#725,9360>    <:f,QCourier,>^<:f>    Returns the result of raising a number to a specified power<**>Expects and returns type 
  3434. <+!>INTEGER<-!><**>Example:  <:f160,QCourier,>3<+!>^<-!>2<:f>  (result is 9)
  3435.  
  3436. @Indent_List@<:#725,9360>    <:f,QCourier,>*<:f>    Returns the product of two numbers<**>Expects and returns type 
  3437. <+!>INTEGER<-!><**>Example:  <:f160,QCourier,>3<+!>*<-!>2<:f>  (result is 6)
  3438.  
  3439. @Indent_List@<:#725,9360>    <:f,QCourier,>/<:f>    Returns the quotient of two numbers<**>Expects and returns type 
  3440. <+!>INTEGER<-!><**>Example:  <:f160,QCourier,>9<+!>/<-!>4<:f>  (result is 2)
  3441.  
  3442. @Indent_List@<:#725,9360>    <:f,QCourier,>%<:f>    Returns the remainder of two numbers<**>Expects and returns type 
  3443. <+!>INTEGER<-!><**>Example:  <:f160,QCourier,>9<+!>%<-!>4<:f>  (result is 1)
  3444.  
  3445. @Indent_List@<:#965,9360>    <:f,QCourier,>+<:f>    Returns the sum of two numbers or a string concatenated to another<**>Expects and returns type 
  3446. <+!>INTEGER<-!> or <+!>STRING<-!><**>Example:  <:f160,QCourier,>1<+!>+<-!>2<:f>  (result is 3)<**>Example:  
  3447. <:f160,QCourier,>"String plus "<+!>+<-!>"String"<:f>  (result is "String plus String")
  3448.  
  3449. @Indent_List@<:#725,9360>    <:f,QCourier,>-<:f>    Returns the difference between two numbers<**>Expects and returns type 
  3450. <+!>INTEGER<-!><**>Example:  <:f160,QCourier,>3<+!>-<-!>2<:f>  (result is 1)
  3451.  
  3452. @Indent_List@<:#980,9360>    <:f,QCourier,>=<:f>    Returns <+!>TRUE<-!> if two values are equal<**>Expects any type; returns type 
  3453. <+!>BOOLEAN<-!><**>Example:  <:f160,QCourier,>3 <+!>=<-!> 3<:f>  (result is 
  3454. <+!>TRUE<-!>)<**>Example:  <:f160,QCourier,>"String" <+!>=<-!> "STRING"<:f>  (result is 
  3455. <+!>FALSE<-!>)
  3456.  
  3457. @Indent_List@<:#980,9360>    <:f,QCourier,><<<;><:f>    Returns <+!>TRUE<-!> if two values are not equal<**>Expects any type; returns type 
  3458. <+!>BOOLEAN<-!><**>Example:  <:f160,QCourier,>3 <:f160,QCourier,><+!><<<;><-!><:f160,QCourier,> 3<:f>  (result is 
  3459. <+!>FALSE<-!>)<**>Example:  <:f160,QCourier,>"String" <+!><<<;><-!> "STRING"<:f>  (result is 
  3460. <+!>TRUE<-!>)
  3461.  
  3462. @Indent_List@<:#980,9360>    <:f,QCourier,><<<:f>    Returns <+!>TRUE<-!> if a value is less than another<**>Expects any type; returns type 
  3463. <+!>BOOLEAN<-!><**>Example:  <:f160,QCourier,>2 <+!><<<-!> 3<:f>  (result is 
  3464. <+!>TRUE<-!>)<**>Example:  <:f160,QCourier,>"STRING" <+!><<<-!> "STRING"<:f>  (result is 
  3465. <+!>FALSE<-!>)
  3466.  
  3467. @Indent_List@<:#980,9360>    <:f,QCourier,><<=<:f>    Returns <+!>TRUE<-!> if a value is less than or equal to another<**>Expects any type; returns type 
  3468. <+!>BOOLEAN<-!><**>Example:  <:f160,QCourier,>2 <+!><<=<-!> 3<:f>  (result is 
  3469. <+!>TRUE<-!>)<**>Example:  <:f160,QCourier,>"STRING" <+!><<=<-!> "STRING"<:f>  (result is 
  3470. <+!>TRUE<-!>)
  3471.  
  3472. @Indent_List@<:#980,9360>    <:f,QCourier,><;><:f>    Returns <+!>TRUE<-!> if a value is greater than another<**>Expects any type; returns type 
  3473. <+!>BOOLEAN<-!><**>Example:  <:f160,QCourier,>2 <+!><;><-!> 3<:f>  (result is 
  3474. <+!>FALSE<-!>)<**>Example:  <:f160,QCourier,>"STRING" <+!><;><-!> "STRING"<:f>  (result is 
  3475. <+!>FALSE<-!>)
  3476.  
  3477. @Indent_List@<:#980,9360>    <:f,QCourier,><;>=<:f>    Returns <+!>TRUE<-!> if a value is greater than or equal to another<**>Expects any type; returns type 
  3478. <+!>BOOLEAN<-!><**>Example:  <:f160,QCourier,>2 <+!><;>=<-!> 3<:f>  (result is 
  3479. <+!>FALSE<-!>)<**>Example:  <:f160,QCourier,>"STRING" <+!><;>=<-!> "STRING"<:f>  (result is 
  3480. <+!>TRUE<-!>)
  3481.  
  3482. @Indent_List@<:#735,9360>    <:f,QCourier,>!<:f>    Returns the logical not of a <+!>BOOLEAN<-!> value<**>Expects and returns type 
  3483. <+!>BOOLEAN<-!><**>Example:  <:f160,QCourier,><+!>!<-!>TRUE<:f>  (result is 
  3484. <+!>FALSE<-!>)
  3485.  
  3486. @Indent_List@<:#735,9360>    <:f,QCourier,>&<:f>    Returns the logical and of two <+!>BOOLEAN<-!> values<**>Expects and returns type 
  3487. <+!>BOOLEAN<-!><**>Example:  <:f160,QCourier,>TRUE <+!>&<-!> FALSE<:f>  (result is 
  3488. <+!>FALSE<-!>)
  3489.  
  3490. @Indent_List@<+@><:#735,9360>    <:f,QCourier,>|<:f>    Returns the logical or of two <+!>BOOLEAN<-!> values<**>Expects and returns type 
  3491. <+!>BOOLEAN<-!><**>Example:  <:f160,QCourier,>TRUE <+!>|<-!> FALSE<:f>  (result is 
  3492. <+!>TRUE<-!>)
  3493.  
  3494. <:#480,9360>PPL operators have a precedence between one and six that determines which operators get processed first.  A precedence of one gets processed first, six gets processed last.
  3495.  
  3496. @Indent_List@<:s><:#240,9360>    Precedence    Operators
  3497.  
  3498. @Indent_List@<:s><:#240,9360>    1    <:f,QCourier,>( )<:f>
  3499.  
  3500. @Indent_List@<:s><:#240,9360>    2    <:f,QCourier,>^<:f>
  3501.  
  3502. @Indent_List@<:s><:#240,9360>    3    <:f,QCourier,>* / %<:f>
  3503.  
  3504. @Indent_List@<:s><:#240,9360>    4    <:f,QCourier,>+ -<:f>
  3505.  
  3506. @Indent_List@<:s><:#240,9360>    5    <:f,QCourier,>= <<<;> << <<= <;> <;>=<:f>
  3507.  
  3508. @Indent_List@<:s><:#240,9360>    6    <:f,QCourier,>! & |<:f>
  3509.  
  3510. <:#480,9360>Binary operators expect both the left and right operands to be of the same type.  If they are not then appropriate type conversions will be performed automatically.
  3511.  
  3512. @Indent_List@<:s><:p<* >>
  3513.  
  3514. @Title@<:s><:#482,9360>PPL Reference
  3515.  
  3516. @Subhead@<:s><:#360,9360>Lists by Type
  3517.  
  3518. <:#480,9360>PPL is composed of basically five different token types.  They are constants, functions, statements, types, and variables.
  3519.  
  3520. @Small_Header@Constant List<:A0>
  3521.  
  3522. <:#240,9360>
  3523.  
  3524. @Small_Header@Function List<:A5>
  3525.  
  3526. <:#240,9360>
  3527.  
  3528. @Small_Header@Statement List<:A1>
  3529.  
  3530. <:#240,9360>
  3531.  
  3532. @Small_Header@Type List<:A6>
  3533.  
  3534. <:#240,9360>
  3535.  
  3536. @Small_Header@Variable List<:A7>
  3537.  
  3538. <:#240,9360>
  3539.  
  3540. <:p<* >>
  3541.  
  3542. @Subhead@<:#360,9360>Lists by Category
  3543.  
  3544. <:s><:#240,9360>Unknown what lists will be necessary at this time.
  3545.  
  3546. @Small_Header@<:#259,9360>??? List
  3547.  
  3548. <:#240,9360>???
  3549.  
  3550. @Small_Header@<:#259,9360>??? List
  3551.  
  3552. <:#240,9360>???
  3553.  
  3554. <:s><:p<* >>
  3555.  
  3556. @Subhead@<+@><:s><:#360,9360>ABORT()   <+">Function<-">
  3557.  
  3558. @Small_Header@<+@><:#259,9360>Function
  3559.  
  3560. <+@><:s><:#240,9360>Returns a flag indicating whether or not the user has aborted the display of information.
  3561.  
  3562. @Small_Header@<+@><:s><:#259,9360>Syntax
  3563.  
  3564. <+@><:#202,9360><:f,QCourier,>ABORT()<:f>
  3565.  
  3566. @Indent_List@<+@><:#240,9360>    No arguments are required
  3567.  
  3568. @Small_Header@<+@><:s><:#259,9360>Return Type & Value
  3569.  
  3570. @Indent_List@<:s><:#730,9360><+!>BOOLEAN<-!>    If the user has aborted the display of information by answering no to a 
  3571. <:f,QCourier,>MORE?<:f> prompt or by hitting ^K or ^X display, this function returns 
  3572. <+!>TRUE<-!>.  Otherwise <+!>FALSE<-!> is returned.<-">
  3573.  
  3574. @Small_Header@<+@><:s><:#259,9360>Remarks
  3575.  
  3576. <:#1455,9360>Unless specifically disabled, the user can abort any display at any time by hitting ^K or ^X or by answering no to a 
  3577. <:f,QCourier,>MORE?<:f> prompt.  If the user does this, PCBoard will not display any further information until the display is reset via the 
  3578. <+!>RESETDISP<-!> statement.  This function should be checked occasionally during long displays of information to determine if the user wants to abort.  If the function returns 
  3579. <+!>TRUE<-!>, you should stop printing information and continue with the next part of the program after using 
  3580. <+!>RESETDISP<-!>.
  3581.  
  3582. @Small_Header@<+@><:s><:#259,9360>Examples
  3583.  
  3584. @Example_Text@<+@><:#1274,9360>INTEGER I<**>STARTDISP FCL<**>' While the user has not aborted, continue<**>WHILE (!<+!>ABORT()<-!>) DO<**>  PRINTLN "I is equal to ",I<**>  INC I<**>ENDWHILE<**>RESETDISP
  3585.  
  3586. @Small_Header@<+@><:s><:#259,9360>See Also
  3587.  
  3588. <+@><:#240,9360><+!>RESETDISP <+">Statement<-">, STARTDISP <+">Statement<-!><-"><-"><-!>
  3589.  
  3590. <+@><:s><+!><+"><:p<* >>
  3591.  
  3592. @Subhead@<:s><:#360,9360>ABS()   <+">Function<-">
  3593.  
  3594. @Small_Header@<+@><:#259,9360>Function
  3595.  
  3596. <+@><:s><:#240,9360>Returns the absolute value of an integer expression.
  3597.  
  3598. @Small_Header@<+@><:s><:#259,9360>Syntax
  3599.  
  3600. <:#202,9360><:f,QCourier,>ABS(iexp)<:f>
  3601.  
  3602. @Indent_List@<:#240,9360>    <:f,QCourier,>iexp<:f>    Any integer expression.
  3603.  
  3604. @Small_Header@<+@><:s><:#259,9360>Return Type & Value
  3605.  
  3606. @Indent_List@<:#490,9360><+!>INTEGER<-!>    If iexp is greater than or equal to 0, this function returns 
  3607. <+!>iexp<-!>.  Otherwise this function returns <+!>-iexp<-!>.
  3608.  
  3609. @Small_Header@<+@><:s><:#259,9360>Remarks
  3610.  
  3611. <:#1445,9360>The most significant use of the absolute value function is to determine the difference between two values.  For example, you may need to know in a program the difference between 8 and 13.  Normal subtraction would yield a result of -5 (8-13).  You don't nee
  3612. d the mathematical difference though, you need the logical difference between the two integers.  The absolute value function will return that.  In other words, while 8-13 is -5, 
  3613. <+!>ABS(8-13)<-!> is 5, which may be a more desirable result in many cases.  Also, it is easier to code and understand than this:
  3614.  
  3615. @Example_Text@<:s><:#474,9360>INTEGER D<**>LET D = 8-13<**>IF (D << 0) LET D = -D
  3616.  
  3617. @Small_Header@<+@><:s><:#259,9360>Examples
  3618.  
  3619. @Example_Text@<:#1274,9360>INTEGER num<**>' Loop while num is << 6 or num <;> 10<**>' ... ABS(4-8)=4 ABS( 5-8)=3 ABS( 6-8)=2 ABS( 7-8)=1<**>'     ABS(9-8)=1 ABS(10-8)=2 ABS(11-8)=3 ABS(12-8)=4 ...<**>WHILE (<+!>ABS(num-8)<-!> <;> 2) DO<**>  PRINTLN "Enter a number from 6 to 10:"<**> 
  3620.  INPUT "Number",num<**>ENDWHILE
  3621.  
  3622. @Example_Text@<+@><:#1116,9360>INTEGER i, r<**>' Generate 10 random numbers from -5 to 5<**>' Print each number and it's absolute value<**>FOR i = 1 TO 10<**>  LET r = RANDOM(10)-5<**>  PRINTLN "The absolute value of ",r," is ",<+!>ABS(r)<-!><**>NEXT
  3623.  
  3624. @Small_Header@<+@><:s><:#259,9360>See Also
  3625.  
  3626. <+@><:s><:#240,9360>
  3627.  
  3628. <+@><:s><:p<* >>
  3629.  
  3630. @Subhead@<+@><:#360,9360>ADJTIME   <+">Statement<-">
  3631.  
  3632. @Small_Header@<:s><:#259,9360>Function
  3633.  
  3634. <:s><:#240,9360>Adjust the users time up or down.
  3635.  
  3636. @Small_Header@<:s><:#259,9360>Syntax
  3637.  
  3638. <:#202,9360><:f,QCourier,>ADJTIME minutes<:f>
  3639.  
  3640. @Indent_List@<:#720,9360>    <:f,QCourier,>minutes<:f>    An integer expression containing the number of minutes that the users time left should be adjusted by.  A value greater than 0 will add time; a value less than 0 will deduct time.
  3641.  
  3642. @Small_Header@<:s><:#259,9360>Remarks
  3643.  
  3644. <:#2400,9360>Use this statement to reward (or penalize) the user with more (or less) time based on any condition or event you wish.  However, the added/deducted time is only applied to the current call.  It will not be remembered after the caller hangs up, except that i
  3645. t will be reflected in the time online today.  For example, if a caller has a normal daily limit of 30 minutes and you add 15 minutes, they can stay online for up to 45 minutes.  If they only stay online for 15 minutes and hangup, they will only have 15 min
  3646. utes left at the beginning of the next call, not 30; the added time isn't saved.  If they stay online for 40 minutes though, it will have given them their entire normal allotment of time plus 10 of the 15 extra minutes.  If they try to call back to use thei
  3647. r last 5 minutes they will not be able to because PCBoard will see that they've used their entire daily time limit plus 10 minutes.  The last 5 minutes wasn't saved.
  3648.  
  3649. @Small_Header@<:s><:#259,9360>Examples
  3650.  
  3651. @Example_Text@<:#2054,9360>STRING yn<**>INPUTYN "Do you wish to gamble 5 minutes for 10",yn,@X0E<**>IF (yn = YESCHAR()) THEN<**>  IF (RANDOM(1) = 1) THEN<**>    PRINTLN "You *WON*!  10 extra minutes awarded . . ."<+!><**>    ADJTIME 10<-!><**>  ELSE<**>    PRINTLN "You lost.  Sorry, 
  3652. but I have to take 5 minutes now . . ."<+!><**>    ADJTIME -5<-!><**>  ENDIF<**>ELSE<**>  PRINTLN "Chicken!  :)"<**>ENDIF
  3653.  
  3654. @Small_Header@<:s><:#259,9360>See Also
  3655.  
  3656. <:s><:#240,9360>
  3657.  
  3658. <:s><:p<* >>
  3659.  
  3660. @Subhead@<:s><:#360,9360>AND()   <+">Function<-">
  3661.  
  3662. @Small_Header@<:#259,9360>Function
  3663.  
  3664. <:#240,9360>Calculate the bitwise AND of two integer arguments.
  3665.  
  3666. @Small_Header@<:s><:#259,9360>Syntax
  3667.  
  3668. <:#202,9360><:f,QCourier,>AND(iexp1,iexp2)<:f>
  3669.  
  3670. @Indent_List@<:#240,9360>    <:f,QCourier,>iexp1<:f>    Any integer expression.
  3671.  
  3672. @Indent_List@<:#240,9360>    <:f,QCourier,>iexp2<:f>    Any integer expression.
  3673.  
  3674. @Small_Header@<+@><:s><:#259,9360>Return Type & Value
  3675.  
  3676. @Indent_List@<:#245,9360><+!>INTEGER<-!>    Returns the bitwise AND of iexp1 and iexp2.
  3677.  
  3678. @Small_Header@<:s><:#259,9360>Remarks
  3679.  
  3680. <:#960,9360>This function may be used to clear selected bits in an integer expression by ANDing the expression with a mask that has the bits to clear set to 0 and the bits to ignore set to 1.  Another use is to calculate the remainder of a division operation by a power
  3681.  of two by ANDing the dividend with the power of two minus one.
  3682.  
  3683. @Small_Header@<:s><:#259,9360>Examples
  3684.  
  3685. @Example_Text@<:#652,9360>' Clear the high word, keeping only the low word<**>PRINTLN "07FFFFFFFh AND 0FFFFh = ",<+!>AND(07FFFFFFFh,0FFFFh)<-!><**>' In this case 123%16 = AND(123,15) (15 = 1111b)<**>PRINTLN "The remainder of 123 divided by 16 is ",<+!>AND(123,1111b)<-!>
  3686.  
  3687. @Small_Header@<:s><:#259,9360>See Also
  3688.  
  3689. <:#240,9360><+!>NOT() <+">Function<-">, OR() <+">Function<-">, XOR() <+">Function<-"><-!><-"><-"><-">
  3690.  
  3691. <:s><:p<* >>
  3692.  
  3693. @Subhead@<:#360,9360>ANSION() <+">  Function<-">
  3694.  
  3695. @Small_Header@<:#259,9360>Function
  3696.  
  3697. <:s><:#240,9360>Report the status of ANSI availability with the current caller.
  3698.  
  3699. @Small_Header@<:s><:#259,9360>Syntax
  3700.  
  3701. <:#202,9360><:f,QCourier,>ANSION()<:f>
  3702.  
  3703. @Indent_List@<:#240,9360>    No arguments are required
  3704.  
  3705. @Small_Header@<:s><:#259,9360>Return Type and Value
  3706.  
  3707. @Indent_List@<:s><:#485,9360><+!>BOOLEAN<-!>    If the caller can support ANSI then <+!>TRUE<-!> is returned, otherwise 
  3708. <+!>FALSE<-!> is returned.
  3709.  
  3710. @Small_Header@<:s><:#259,9360>Remarks
  3711.  
  3712. <:#1940,9360>This function will return <+!>TRUE<-!> if the caller has ANSI capabilities.  This could have been determined one of two ways.  If the user answered yes to the 
  3713. <:f,QCourier,>Do you want graphics?<:f> prompt this function will return 
  3714. <+!>TRUE<-!>.  If the user answered no, there is still a chance that the user has ANSI capabilities; PCBoard will interrogate the remote computer to find out if ANSI is available.  If it is, this function will return 
  3715. <+!>TRUE<-!>.  Finally, if the user answered no and PCBoard was unable to detect ANSI at login this function will return 
  3716. <+!>FALSE<-!>.  There is still a chance that the user could support ANSI but the only safe approach at this point is to assume that there is no ANSI available.
  3717.  
  3718. @Small_Header@<:s><:#259,9360>Examples
  3719.  
  3720. @Example_Text@<:#168,9360>IF (<+!>ANSION()<-!>) PRINTLN "You have ANSI support available!"
  3721.  
  3722. @Small_Header@<:s><:#259,9360>See Also
  3723.  
  3724. <:#480,9360><+!>ANSIPOS <+">Statement<-">, BACKUP <+">Statement<-">, FORWARD <+">Statement<-">, GETX() 
  3725. <+">Function<-">, GETY() <+">Function<-">, GRAFMODE() <+">Function
  3726.  
  3727. <:s><+!><+"><:p<* >>
  3728.  
  3729. @Subhead@<:#360,9360><-"><-">ANSIPOS   <+">Statement<-">
  3730.  
  3731. @Small_Header@<:s><:#259,9360>Function
  3732.  
  3733. <:s><:#240,9360>Position the cursor anywhere on the screen using an ANSI positioning escape sequence.
  3734.  
  3735. @Small_Header@<:s><:#259,9360>Syntax
  3736.  
  3737. <:#202,9360><:f,QCourier,>ANSIPOS xpos, ypos<:f>
  3738.  
  3739. @Indent_List@<:#480,9360>    <:f,QCourier,>xpos<:f>    An integer expression with the screen column (x position) in which to place the cursor.  Valid columns are 1 through 80.
  3740.  
  3741. @Indent_List@<:#480,9360>    <:f,QCourier,>ypos<:f>    An integer expression with the screen row (y position) on which to place the cursor.  Valid rows are 1 through 23.
  3742.  
  3743. @Small_Header@<:s><:#259,9360>Remarks
  3744.  
  3745. <:#965,9360>This statement will position the cursor to the specified (X,Y) coordinate on the screen but only if the current caller has ANSI support.  If you are writing a program that will require ANSI positioning, check the value of the 
  3746. <+!>ANSION()<-!> function.  If ANSI is not available, this statement will be ignored.
  3747.  
  3748. @Small_Header@<:s><:#259,9360>Examples
  3749.  
  3750. @Example_Text@<:#1422,9360>CLS<**>IF (ANSION()) THEN<+!><**>  ANSIPOS 1,1<-!><**>  PRINTLN "This starts at (1,1)"<+!><**>  ANSIPOS 3,3<-!><**>  PRINTLN "This starts at (3,3)"<+!><**>  ANSIPOS 2,2<-!><**>  PRINTLN "And *THIS* starts at (2,2)"<**>ENDIF
  3751.  
  3752. @Small_Header@<:s><:#259,9360>See Also
  3753.  
  3754. <:#480,9360><+!>ANSION() <+">Function<-">, BACKUP <+">Statement<-">, FORWARD <+">Statement<-">, GETX() 
  3755. <+">Function<-">, GETY() <+">Function<-">, GRAFMODE() <+">Function
  3756.  
  3757. <:s><+!><+"><:p<* >>
  3758.  
  3759. @Subhead@<:#360,9360>ASC()   <+">Function<-">
  3760.  
  3761. @Small_Header@<:#259,9360>Function
  3762.  
  3763. <:s><:#240,9360>Converts a character to it's ASCII code.
  3764.  
  3765. @Small_Header@<:s><:#259,9360>Syntax
  3766.  
  3767. <:#202,9360><:f,QCourier,>ASC(sexp)<:f>
  3768.  
  3769. @Indent_List@<:#240,9360>    <:f,QCourier,>sexp<:f>    Any string expression.
  3770.  
  3771. @Small_Header@<+@><:s><:#259,9360>Return Type & Value
  3772.  
  3773. @Indent_List@<:#485,9360><+!>INTEGER<-!>    Returns the ASCII code of the first character of sexp (1-255) or 0 if sexp is an empty string.
  3774.  
  3775. @Small_Header@<:s><:#259,9360>Remarks
  3776.  
  3777. <:s><:#960,9360>In other languages (such as BASIC) you can have any of the 256 possible ASCII codes (0-255) in a string.  In PPL you are limited to 255 codes (1-255) because ASCII 0 is used to terminate strings and can't appear in the middle of a string.  So, if you ever g
  3778. et a 0 returned from this function, it is because you passed it an empty string.
  3779.  
  3780. @Small_Header@<:s><:#259,9360>Examples
  3781.  
  3782. @Example_Text@<:#652,9360>PRINTLN "The ASCII code for S is ",<+!>ASC("S")<-!><**>' Convert a lowercase s to uppercase<**>STRING s<**>LET s = CHR(<+!>ASC("s")<-!>-<+!>ASC("a")<-!>+<+!>ASC("A")<-!>)
  3783.  
  3784. @Small_Header@<:s><:#259,9360>See Also
  3785.  
  3786. <:#240,9360><+!>CHR() <+">Function<-"><-!><-"><-"><-">
  3787.  
  3788. <:s><:p<* >>
  3789.  
  3790. @Subhead@<:s><:#360,9360>AUTO   <+">Constant<-">
  3791.  
  3792. @Small_Header@<:s><:#259,9360>Function
  3793.  
  3794. <:#245,9360>Set the auto answer flag in an <+!>INPUTSTR<-!> or <+!>PROMPTSTR<-!> statement.
  3795.  
  3796. @Small_Header@<:s><:#259,9360>Value
  3797.  
  3798. <:#240,9360>8192 = 10000000000000b = 20000o = 2000h
  3799.  
  3800. @Small_Header@<:s><:#259,9360>Remarks
  3801.  
  3802. <:#1210,9360>The <+!>INPUTSTR<-!> and <+!>PROMPTSTR<-!> statements have the ability to automatically answer themselves if left alone for 20 seconds.  It can be especially useful if you are writing a program that should work with automated systems; use the 
  3803. <+!>AUTO<-!> constant and the question will automatically be answered after 20 seconds just in case the automation system doesn't know what to do with it.
  3804.  
  3805. @Small_Header@<:s><:#259,9360>Examples
  3806.  
  3807. @Example_Text@<:#642,9360>STRING ans<**>LET ans = NOCHAR()<**>INPUTSTR "Run program now",ans,@X0E,1,"",<+!>AUTO<-!>+YESNO<**>IF (ans = NOCHAR()) END
  3808.  
  3809. @Small_Header@<:s><:#259,9360>See Also
  3810.  
  3811. <:#240,9360><+!>INPUTSTR <+">Statement<-">, PROMPTSTR <+">Statement<-"><-!><-"><-">
  3812.  
  3813. <:s><:p<* >>
  3814.  
  3815. @Subhead@<:#360,9360>B2W()   <+">Function<-">
  3816.  
  3817. @Small_Header@<:#259,9360>Function
  3818.  
  3819. <:#240,9360>Convert two byte-sized arguments into a single word-sized argument.
  3820.  
  3821. @Small_Header@<:#259,9360>Syntax
  3822.  
  3823. <:#202,9360><:f,QCourier,>B2W(iexp1,iexp2)<:f>
  3824.  
  3825. @Indent_List@<:#240,9360>    <:f,QCourier,>iexp1<:f>    Any integer expression with a value between 000h and 0FFh.
  3826.  
  3827. @Indent_List@<:#240,9360>    <:f,QCourier,>iexp2<:f>    Any integer expression with a value between 000h and 0FFh.
  3828.  
  3829. @Small_Header@<:#259,9360>Return Type & Value
  3830.  
  3831. @Indent_List@<:#485,9360><+!>INTEGER<-!>    Returns a word-sized value between 00000h and 0FFFFh.  The return value is computed by the following expression:  
  3832. <:f160,QCourier,>iexp1+iexp2*0100h<:f>.
  3833.  
  3834. @Small_Header@<:#259,9360>Remarks
  3835.  
  3836. <:#965,9360>It is sometimes necessary to combine two bytes together to form a word.  This function simplifies that process, and speeds it up a little as well by doing it internally instead of requiring you to perform the arithmetic yourself.  It can be especially usefu
  3837. l when used with the <+!>DOINTR<-!> statement.
  3838.  
  3839. @Small_Header@<:#259,9360>Examples
  3840.  
  3841. @Example_Text@<:#1116,9360>' This line will display 25 *'s at the current screen position<**>' NOTES:  10h is the Video BIOS interrupt<**>'         B2W(ASC("*"),09h) is the char to print and the service number<**>'         0007h is video page 0, attribute 7<**>'         25 is the num
  3842. ber of characters to print<**>'         All others are 0 and not needed for this function<**>DOINTR 10h,<+!>B2W(09h,ASC("*"))<-!>,0007h,25,0,0,0,0,0,0
  3843.  
  3844. @Small_Header@<:#259,9360>See Also
  3845.  
  3846. <:#240,9360><+!>DOINTR <+">Statement<-"><-!><-">
  3847.  
  3848. <:p<* >>
  3849.  
  3850. @Subhead@<:#360,9360>BACKUP   <+">Statement<-">
  3851.  
  3852. @Small_Header@<:#259,9360>Function
  3853.  
  3854. <:#240,9360>Move the cursor backward a specified number of columns.
  3855.  
  3856. @Small_Header@<:#259,9360>Syntax
  3857.  
  3858. <:#202,9360><:f,QCourier,>BACKUP numcols<:f>
  3859.  
  3860. @Indent_List@<:#480,9360>    <:f,QCourier,>numcols<:f>    An integer expression of the number of columns to move backward.  Valid values are 1 through 79.
  3861.  
  3862. @Small_Header@<:#259,9360>Remarks
  3863.  
  3864. <:#1925,9360>This statement will move the cursor backward, nondestructively, a specified number of columns.  It will work with or without ANSI.  If ANSI is available (as reported by the 
  3865. <+!>ANSION()<-!> function) then it will use an ANSI positioning command; otherwise it will use the specified number of backspace characters.  ANSI is usually faster, but backspace characters will get the job done.  Note that you cannot use this function to 
  3866. move beyond column 1; to do so would require ANSI.  So, if the cursor is already in column 1 this statement will have no effect.  And if the cursor is in column 80 the maximum you could move backward would be 79 (column 80 - 79 columns = column 1).
  3867.  
  3868. @Small_Header@<:#259,9360>Examples
  3869.  
  3870. @Example_Text@<:#1264,9360>PRINT "Rolling dice -- "<**>FOR i = 1 TO 10<**>  LET d1 = RANDOM(5)+1<**>  LET d2 = RANDOM(5)+1<**>  PRINT d1,"-",d2<+!><**>  BACKUP 3<-!><**>NEXT<**>NEWLINE
  3871.  
  3872. @Small_Header@<:#259,9360>See Also
  3873.  
  3874. <:#480,9360><+!>ANSION() <+">Function<-">, ANSIPOS <+">Statement<-">, FORWARD 
  3875. <+">Statement<-">, GETX() <+">Function<-">, GETY() <+">Function<-">, GRAFMODE() 
  3876. <+">Function
  3877.  
  3878. <+!><+"><:p<* >>
  3879.  
  3880. @Subhead@<:#360,9360>BELL   <+">Constant<-">
  3881.  
  3882. @Small_Header@<:#259,9360>Function
  3883.  
  3884. <:#245,9360>Set the bell flag in a <+!>DISPTEXT<-!> statement.
  3885.  
  3886. @Small_Header@<:#259,9360>Value
  3887.  
  3888. <:#240,9360>2048 = 100000000000b = 4000o = 800h
  3889.  
  3890. @Small_Header@<:#259,9360>Remarks
  3891.  
  3892. <:#1205,9360>The <+!>DISPTEXT<-!> statement has the ability to sound a bell before displaying the actual text of a prompt.  This is useful when you want to get the users attention when displaying information.  It sends a ^G (ASCII 7) character to the remote caller and s
  3893. ounds the alarm on the local computer running PCBoard (unless the alarm has been toggled off).  It is the responsibility of the users terminal software to support the ^G.
  3894.  
  3895. @Small_Header@<:#259,9360>Examples
  3896.  
  3897. @Example_Text@<:#326,9360>' Get the users attention and display the closed board prompt<**>DISPTEXT 11,<+!>BELL<-!>+LFAFTER+LFBEFORE
  3898.  
  3899. @Small_Header@<:#259,9360>See Also<-"><-"><-"><-">
  3900.  
  3901. <:#240,9360>
  3902.  
  3903. <:p<* >>
  3904.  
  3905. @Subhead@<:#360,9360>BLT   <+">Statement<-">
  3906.  
  3907. @Small_Header@<:#259,9360>Function
  3908.  
  3909. <:#240,9360>Display a specified bulletin number to the user.
  3910.  
  3911. @Small_Header@<:#259,9360>Syntax
  3912.  
  3913. <:#202,9360><:f,QCourier,>BLT bltnum<:f>
  3914.  
  3915. @Indent_List@<:#480,9360>    <:f,QCourier,>bltnum<:f>    The number of the bulletin to display to the user.  Valid values are 1 through the number of bulletins available.
  3916.  
  3917. @Small_Header@<:#259,9360>Remarks
  3918.  
  3919. <:#720,9360>This statement will display a specified bulletin number to the user.  The BLT.LST file for the current conference will be searched for the bulletin.  If the bulletin number is invalid (less than 1 or greater than the highest bulletin number defined) then no
  3920. thing will be displayed.
  3921.  
  3922. @Small_Header@<:#259,9360>Examples
  3923.  
  3924. @Example_Text@<:#474,9360>INTEGER num<**>INPUT "Bulletin to view",num<+!><**>BLT num<-!>
  3925.  
  3926. @Small_Header@<:#259,9360>See Also
  3927.  
  3928. <:#240,9360>
  3929.  
  3930. <:p<* >>
  3931.  
  3932. @Subhead@<:#360,9360>BOOLEAN   <+">Type<-">
  3933.  
  3934. @Small_Header@<:#259,9360>Function
  3935.  
  3936. <:#240,9360>Declare one or more variables of type boolean.
  3937.  
  3938. @Small_Header@<:#259,9360>Syntax
  3939.  
  3940. <:#202,9360><:f200,QCourier,>BOOLEAN var|arr(s<[>,s<[>,s]])<[>,var|arr(s<[>,s<[>,s]])]<:f>
  3941.  
  3942. @Indent_List@<:#720,9360>    <:f,QCourier,>var<:f>    The name of a variable to declare.  Must start with a letter <[>A-Z] which may be followed by letters, digits <[>0-9] or the underscore <[>_].  May be of any length but only the first 32 characters are used.
  3943.  
  3944. @Indent_List@<:#480,9360>    <:f,QCourier,>arr<:f>    The name of an array variable to declare.  The same naming conventions as var are used.
  3945.  
  3946. @Indent_List@<:#480,9360>    <:f,QCourier,>s<:f>    The size (0-based) of an array variable dimension.  Any constant integer expression is allowed.
  3947.  
  3948. @Small_Header@<:#259,9360>Remarks
  3949.  
  3950. <:#1715,9360><+!>BOOLEAN<-!> variables can hold two values:  1 or 0 (<+!>TRUE<-!> or 
  3951. <+!>FALSE<-!>).<+!>  <-!>It is stored internally as a one byte unsigned character.  If a 
  3952. <+!>BOOLEAN<-!> is assigned to or from an <+!>INTEGER<-!> type then the value 1 or 0 is assigned.  If a 
  3953. <+!>BOOLEAN<-!> is assigned to a <+!>STRING<-!> type then it is automatically converted to a string (either "1" or "0").  If a 
  3954. <+!>STRING<-!></`>is assigned to a <+!>BOOLEAN<-!> then the value of the string will be used; a 0 value will be taken as is, another other value will be converted to 1.  All other types, when assigned to or from a 
  3955. <+!>BOOLEAN<-!>, will be converted to an <+!>INTEGER<-!> first before being assigned to or from the 
  3956. <+!>BOOLEAN<-!> type.
  3957.  
  3958. @Small_Header@<:#259,9360>Examples
  3959.  
  3960. @Example_Text@<:#158,9360><+!>BOOLEAN flag, bit, isPrime(100), leapYears(2079-1900)<-!>
  3961.  
  3962. @Small_Header@<:#259,9360>See Also
  3963.  
  3964. <:#240,9360><+!>DATE <+">Type<-">, INTEGER <+">Type<-">, MONEY <+">Type<-">, STRING 
  3965. <+">Type<-">, TIME <+">Type<-"><-!><-"><-"><-"><-"><-">
  3966.  
  3967. <:p<* >>
  3968.  
  3969. @Subhead@<+@><:#360,9360>BROADCAST   <+">Statement<-">
  3970.  
  3971. @Small_Header@<:#259,9360>Function
  3972.  
  3973. <:#240,9360>Broadcast a single line message to a range of nodes.
  3974.  
  3975. @Small_Header@<:#259,9360>Syntax
  3976.  
  3977. <:#202,9360><:f,QCourier,>BROADCAST lonode,hinode,message<:f>
  3978.  
  3979. @Indent_List@<:#480,9360>    <:f,QCourier,>lonode<:f>    An integer expression containing the low node number to which the message should be broadcast.
  3980.  
  3981. @Indent_List@<:#480,9360>    <:f,QCourier,>hinode<:f>    An integer expression containing the high node number to which the message should be broadcast.
  3982.  
  3983. @Indent_List@<:#480,9360>    <:f,QCourier,>message<:f>    A string expression containing the message text which should be broadcast to the specified nodes.
  3984.  
  3985. @Small_Header@<:#259,9360>Remarks
  3986.  
  3987. <:#960,9360>This PPL statement functions the same as the PCBoard BROADCAST command, which is normally reserved for SysOp security level.  This statement allows you to programatically broadcast a message to a range of nodes without giving users the ability to manually b
  3988. roadcast at any time they choose.
  3989.  
  3990. @Small_Header@<:#259,9360>Examples
  3991.  
  3992. @Example_Text@<:#948,9360>' Broadcast a message to a specific node<+!><**>BROADCAST 5,5,"This broadcast from "+STRING(PCBNODE())<-!><**>' Broadcast to a range of nodes<**><+!>BROADCAST 4,8,"Stand-by for log off in 10 seconds"<-!><**>' Broadcast to all nodes<**><+!>BROADCAST 1,65535,
  3993. "Hello all!"<-!>
  3994.  
  3995. @Small_Header@<:#259,9360>See Also
  3996.  
  3997. <:#240,9360>
  3998.  
  3999. <:p<* >>
  4000.  
  4001. @Subhead@<+@><:#360,9360>BYE   <+">Statement<-">
  4002.  
  4003. @Small_Header@<:#259,9360>Function
  4004.  
  4005. <:#240,9360>Log the user off as though they had typed the BYE command.
  4006.  
  4007. @Small_Header@<:#259,9360>Syntax
  4008.  
  4009. <:#202,9360><:f,QCourier,>BYE<:f>
  4010.  
  4011. @Indent_List@<:#240,9360>    No arguments are required
  4012.  
  4013. @Small_Header@<:#259,9360>Remarks
  4014.  
  4015. <:#1685,9360>There are multiple ways for the user to log off.  One is by typing G at the command prompt.  That will warn them if they have files flagged for download and (optionally) confirm their selection (incase they accidentally hit G and ENTER).  Another is the BYE
  4016.  command.  PCBoard assumes that, if the user typed BYE instead of G, that they really want to log off, didn't type it in accidentally, and want to leave 
  4017. <+!>now<-!>.  The <+!>BYE<-!> statement does just that.  It is intended to provide you PPL with the same functionality as many PCBoard prompts where G or BYE can be entered at any point.
  4018.  
  4019. @Small_Header@<:#259,9360>Examples
  4020.  
  4021. @Example_Text@<:#958,9360>STRING s<**>INPUT "What do you want to do",s<**>IF     (s = "G")   THEN GOODBYE<**>ELSEIF (s = "BYE") THEN 
  4022. <+!>BYE<-!><**>ELSE                    KBDSTUFF s<**>ENDIF
  4023.  
  4024. @Small_Header@<:#259,9360>See Also
  4025.  
  4026. <:#240,9360><+!>GOODBYE <+">Statement<-">, HANGUP <+">Statement<-"><-!>
  4027.  
  4028. <:p<* >>
  4029.  
  4030. @Subhead@<+@><:#360,9360>CALL   <+">Statement<-">
  4031.  
  4032. @Small_Header@<:#259,9360>Function
  4033.  
  4034. <:#240,9360>Call (execute) another PPE file from the currently executing PPE.
  4035.  
  4036. @Small_Header@<:#259,9360>Syntax
  4037.  
  4038. <:#202,9360><:f,QCourier,>CALL filename<:f>
  4039.  
  4040. @Indent_List@<:#480,9360>    <:f,QCourier,>filename<:f>    A string expression containing the complete path and filename of a PPE file to load and execute.
  4041.  
  4042. @Small_Header@<:#259,9360>Remarks
  4043.  
  4044. <:#2185,9360>It is sometimes convienient to load and run complete programs from other programs, similar to how you process subroutines with 
  4045. <+!>GOSUB<-!> and <+!>RETURN<-!>.  PPL supports running both external EXE and COM files via the 
  4046. <+!>SHELL<-!> statement and other PPE files via the <+!>CALL<-!> statement.  
  4047. <+!>CALL<-!> allows you to load and run another PPE file, after which control returns to the first PPE at the statement after the 
  4048. <+!>CALL<-!>.  The second PPE is completely separate from the first.  You may pass values to the PPE by tokenizing a string with the 
  4049. <+!>TOKENIZE<-!> statement.  If you need to pass values back to the first PPE, you will need to create some sort of parameter passing convention yourself.  For example, you may have the second PPE create a file that has the needed information for the first 
  4050. PPE.
  4051.  
  4052. @Small_Header@<:#259,9360>Examples
  4053.  
  4054. @Example_Text@<:#474,9360>STRING s<**>INPUT "What PPE file do you wish to run",s<**><+!>CALL "C:\PCB\PPE\"+s+".PPE"<-!>
  4055.  
  4056. @Small_Header@<:#259,9360>See Also
  4057.  
  4058. <:#240,9360><+!>SHELL <+">Statement<-"><-!>
  4059.  
  4060. <:p<* >>
  4061.  
  4062. @Subhead@<:#360,9360>CALLID()   <+">Function<-">
  4063.  
  4064. @Small_Header@<:#259,9360>Function
  4065.  
  4066. <:#240,9360>Access caller ID information returned from caller ID compatible modems.
  4067.  
  4068. @Small_Header@<:#259,9360>Syntax
  4069.  
  4070. <:#202,9360><:f,QCourier,>CALLID<:f><:f,QCourier,>(<:f><:f,QCourier,>)<:f>
  4071.  
  4072. @Indent_List@<:#240,9360>    No arguments are required
  4073.  
  4074. @Small_Header@<:#259,9360>Return Type & Value
  4075.  
  4076. @Indent_List@<:#485,9360><+!>STRING<-!>    Returns a string with caller ID information captured from a caller ID compatible modem.
  4077.  
  4078. @Small_Header@<:#259,9360>Remarks
  4079.  
  4080. <:#1440,9360>Some areas of the country have an optional service available which will send, to your modem (other other telephone device), the phone number and/or name of the person calling you.  This service is known as 'Caller ID'.  Some modems are starting to support i
  4081. t directly by capturing the information and sending it to you between the first and second rings.  It can be very helpful in determining who is calling (or abusing) your BBS or for statistical purposes.  This function will return the information if your mod
  4082. em supports it.
  4083.  
  4084. @Small_Header@<:#259,9360>Examples
  4085.  
  4086. @Example_Text@<+@><:#484,9360>FAPPEND 1,"CID.LOG",O_WR,S_DW<**>FPUTLN 1,LEFT(U_NAME(),30)+<+!>CALLID()<-!><**>FCLOSE 1
  4087.  
  4088. @Small_Header@<:#259,9360>See Also
  4089.  
  4090. <:#240,9360><-"><-">
  4091.  
  4092. <:p<* >>
  4093.  
  4094. @Subhead@<+@><:#360,9360>CALLNUM()   <+">Function<-">
  4095.  
  4096. @Small_Header@<+@><:#259,9360>Function
  4097.  
  4098. <+@><:#240,9360>Returns the current caller number.
  4099.  
  4100. @Small_Header@<+@><:#259,9360>Syntax
  4101.  
  4102. <+@><:#202,9360><:f,QCourier,>CALLNUM()<:f>
  4103.  
  4104. @Indent_List@<+@><:#240,9360>    No arguments are required
  4105.  
  4106. @Small_Header@<+@><:#259,9360>Return Type & Value
  4107.  
  4108. @Indent_List@<:#245,9360><+!>INTEGER<-!>    Returns the caller number of the user online.<-">
  4109.  
  4110. @Small_Header@<+@><:#259,9360>Remarks
  4111.  
  4112. <:#1210,9360>Everytime a user logs on to the system the system caller number is incremented.  This function will return the caller number for use in your PPL applications.  It is kept in the main conference MSGS file.  Note that the number is not incremented until after
  4113.  the user has completely logged on to the system so you should generally wait until 
  4114. <+!>LOGGEDON()<-!> reports <+!>TRUE<-!> before using this function.
  4115.  
  4116. @Small_Header@<+@><:#259,9360>Examples
  4117.  
  4118. @Example_Text@<+@><:#1274,9360>IF (LOGGEDON() & (<+!>CALLNUM()<-!> = 1000000)) THEN<**>  PRINTLN "@BEEP@CONGRATULATIONS!!!"<**>  PRINTLN "@BEEP@YOU ARE THE 1,000,000th CALLER!!!"<**>  PRINTLN "Upgrading security . . ."<**>  GETUSER<**>  LET U_SEC = 99<**>  PUTUSER<**>ENDIF
  4119.  
  4120. @Small_Header@<+@><:#259,9360>See Also
  4121.  
  4122. <+@><:#240,9360><-"><-!>
  4123.  
  4124. <+@><+!><+"><:p<* >>
  4125.  
  4126. @Subhead@<+@><:#360,9360>CARRIER()   <+">Function<-">
  4127.  
  4128. @Small_Header@<:#259,9360>Function
  4129.  
  4130. <:#240,9360>Determine what speed the current caller is connected at.
  4131.  
  4132. @Small_Header@<:#259,9360>Syntax
  4133.  
  4134. <:#202,9360><:f,QCourier,>CARRIER<:f><:f,QCourier,>(<:f><:f,QCourier,>)<:f>
  4135.  
  4136. @Indent_List@<:#240,9360>    No arguments are required
  4137.  
  4138. @Small_Header@<:#259,9360>Return Type & Value
  4139.  
  4140. @Indent_List@<:#245,9360><+!>INTEGER<-!>    Returns an integer with the connect speed of the current caller.
  4141.  
  4142. @Small_Header@<:#259,9360>Remarks
  4143.  
  4144. <:#1680,9360>Should the need arise for you to know what speed the caller is connected to the BBS at, this function will return that information.  You should note that this information is not guaranteed accurate.  It is the responsibility of the modem to tell PCBoard the
  4145.  actual connect speed, especially in locked port environments.  For example, if your serial port is locked at 38400 bps, the modem can usually be configured to report either the actual connect speed (9600 bps, for example) or the locked port rate (38400 bps
  4146. ).  PCBoard has to trust the modem; if the modem tells it 38400, it will have to live with that, as will your PPL applications.
  4147.  
  4148. @Small_Header@<:#259,9360>Examples
  4149.  
  4150. @Example_Text@<:#642,9360>IF (<+!>CARRIER()<-!> << 9600) THEN<**>  PRINTLN "Sorry, downloads are not permitted at speeds below 9600 bps"<**>  END<**>ENDIF
  4151.  
  4152. @Small_Header@<:#259,9360>See Also
  4153.  
  4154. <:#240,9360><-"><-">
  4155.  
  4156. <:p<* >>
  4157.  
  4158. @Subhead@<:#360,9360>CCTYPE()   <+">Function<-">
  4159.  
  4160. @Small_Header@<:#259,9360>Function
  4161.  
  4162. <:#240,9360>Determine what the type of a credit card is based on the credit card number.
  4163.  
  4164. @Small_Header@<:#259,9360>Syntax
  4165.  
  4166. <:#202,9360><:f,QCourier,>CCTYPE<:f><:f,QCourier,>(<:f><:f,QCourier,>ccnum)<:f>
  4167.  
  4168. @Indent_List@<:#240,9360>    <:f,QCourier,>ccnum<:f>    A string expression with the credit card number that is to be checked.
  4169.  
  4170. @Small_Header@<:#259,9360>Return Type & Value
  4171.  
  4172. @Indent_List@<:#245,9360><+!>STRING<-!>    Returns a string with the name of the card.
  4173.  
  4174. @Small_Header@<:#259,9360>Remarks
  4175.  
  4176. <:#1685,9360>PPL can be used to perform some simple credit card validation.  This function returns the issuer of a credit card based on the credit card number.  For example, a valid credit card number that starts with a "4" is a Visa card, so the string "VISA" will be r
  4177. eturned.  If a credit card is invalid (<+!>VALCC()<-!> = <+!>FALSE<-!>) or not recognized, then "UNKNOWN" will be returned.  Other valid credit card with known types will return the appropriate string.  The following card types are recognized by PPL:  "DISC
  4178. OVER", "CARTE BLANCHE", "DINERS CLUB", "OPTIMA", "AMERICAN EXPRESS", "VISA", and "MASTERCARD".
  4179.  
  4180. <:#240,9360>
  4181.  
  4182. @Small_Header@<:#259,9360>Examples
  4183.  
  4184. @Example_Text@<:#484,9360>STRING s<**>INPUT "Credit card number",s<**>IF (VALCC(s)) PRINTLN LEFT(<+!>CCTYPE(s)<-!>,20)," - ",FMTCC(s)
  4185.  
  4186. @Small_Header@<:#259,9360>See Also
  4187.  
  4188. <:#240,9360><-"><-">
  4189.  
  4190. <:p<* >>
  4191.  
  4192. @Subhead@<+@><:#360,9360>CDCHKOFF   <+">Statement<-">
  4193.  
  4194. @Small_Header@<:#259,9360>Function
  4195.  
  4196. <:#240,9360>Turn off carrier detect checking.
  4197.  
  4198. @Small_Header@<:#259,9360>Syntax
  4199.  
  4200. <:#202,9360><:f,QCourier,>CDCHKOFF<:f>
  4201.  
  4202. @Indent_List@<:#240,9360>    No arguments are required
  4203.  
  4204. @Small_Header@<:#259,9360>Remarks
  4205.  
  4206. <:#2170,9360>PCBoard has built in automatic carrier detecting.  What this means is that if someone should hangup unexpectedly, PCBoard will detect it, log it to the callers log, and recycle back to the call waiting screen.  Some applications require the ability to turn 
  4207. this off; for example, a callback verification PPE needs to hangup on the caller and then do more processing.  Normally, PCBoard would just recycle at that point.  So, just before you start a section of code that should continue regardless of the existence 
  4208. of a caller online, you should issue a <+!>CDCHKOFF<-!> statement.  It will turn off the automatic carrier checking.  When you've finished the block where carrier checking has been disabled, issue the 
  4209. <+!>CDCHKON<-!> statement to turn it back on.
  4210.  
  4211. @Small_Header@<:#259,9360>Examples
  4212.  
  4213. @Example_Text@<:#1106,9360><+!>CDCHKOFF<-!><**>DTROFF<**>DELAY 18<**>DTRON<**>SENDMODEM "ATDT1800DATAFON" ' Please don't call this number! :)<**>WAITFOR "CONNECT",60<**>CDCHKON
  4214.  
  4215. @Small_Header@<:#259,9360>See Also
  4216.  
  4217. <:#240,9360><+!>CDCHKON <+">Statement<-"><-!>
  4218.  
  4219. <:p<* >>
  4220.  
  4221. @Subhead@<+@><:#360,9360>CDCHKON   <+">Statement<-">
  4222.  
  4223. @Small_Header@<:#259,9360>Function
  4224.  
  4225. <:#240,9360>Turn on carrier detect checking.
  4226.  
  4227. @Small_Header@<:#259,9360>Syntax
  4228.  
  4229. <:#202,9360><:f,QCourier,>CDCHKON<:f>
  4230.  
  4231. @Indent_List@<:#240,9360>    No arguments are required
  4232.  
  4233. @Small_Header@<:#259,9360>Remarks
  4234.  
  4235. <:#2170,9360>PCBoard has built in automatic carrier detecting.  What this means is that if someone should hangup unexpectedly, PCBoard will detect it, log it to the callers log, and recycle back to the call waiting screen.  Some applications require the ability to turn 
  4236. this off; for example, a callback verification PPE needs to hangup on the caller and then do more processing.  Normally, PCBoard would just recycle at that point.  So, just before you start a section of code that should continue regardless of the existence 
  4237. of a caller online, you should issue a <+!>CDCHKOFF<-!> statement.  It will turn off the automatic carrier checking.  When you've finished the block where carrier checking has been disabled, issue the 
  4238. <+!>CDCHKON<-!> statement to turn it back on.
  4239.  
  4240. @Small_Header@<:#259,9360>Examples
  4241.  
  4242. @Example_Text@<:#1106,9360>CDCHKOFF<**>DTROFF<**>DELAY 18<**>DTRON<**>SENDMODEM "ATDT1800DATAFON" ' Please don't call this number! :)<**>WAITFOR "CONNECT",60<+!><**>CDCHKON<-!>
  4243.  
  4244. @Small_Header@<:#259,9360>See Also
  4245.  
  4246. <:#240,9360><+!>CDCHKOFF <+">Statement<-"><-!>
  4247.  
  4248. <:p<* >>
  4249.  
  4250. @Subhead@<:#360,9360>CDON()   <+">Function<-">
  4251.  
  4252. @Small_Header@<:#259,9360>Function
  4253.  
  4254. <:#240,9360>Determine if carrier detect in on or not.
  4255.  
  4256. @Small_Header@<:#259,9360>Syntax
  4257.  
  4258. <:#202,9360><:f,QCourier,>CDON<:f><:f,QCourier,>(<:f><:f,QCourier,>)<:f>
  4259.  
  4260. @Indent_List@<:#240,9360>    No arguments are required
  4261.  
  4262. @Small_Header@<:#259,9360>Return Type & Value
  4263.  
  4264. @Indent_List@<:#245,9360><+!>BOOLEAN<-!>    Returns a boolean <+!>TRUE<-!> if carrier detect is on, 
  4265. <+!>FALSE<-!> otherwise.
  4266.  
  4267. @Small_Header@<:#259,9360>Remarks
  4268.  
  4269. <:#725,9360>If you have used <+!>CDCHKOFF<-!> to turn off automatic carrier detect checking PCBoard will not automatically detect and act on a carrier loss.  If necessary, this function can be used to detect a carrier loss condition and act appropriately.
  4270.  
  4271. @Small_Header@<:#259,9360>Examples
  4272.  
  4273. @Example_Text@<:#642,9360>IF (!<+!>CDON()<-!>) THEN<**>  LOG "Carrier lost in PPE "+PPENAME(),FALSE<**>  HANGUP<**>ENDIF
  4274.  
  4275. @Small_Header@<:#259,9360>See Also
  4276.  
  4277. <:#240,9360><-"><-">
  4278.  
  4279. <:p<* >>
  4280.  
  4281. @Subhead@<+@><:#360,9360>CHAT   <+">Statement<-">
  4282.  
  4283. @Small_Header@<:#259,9360>Function
  4284.  
  4285. <:#240,9360>Enter SysOp chat mode.
  4286.  
  4287. @Small_Header@<:#259,9360>Syntax
  4288.  
  4289. <:#202,9360><:f,QCourier,>CHAT<:f>
  4290.  
  4291. @Indent_List@<:#240,9360>    No arguments are required
  4292.  
  4293. @Small_Header@<:#259,9360>Remarks
  4294.  
  4295. <:#1930,9360>One of the features of PCBoard where change is often requested is the operator page facility.  Some people want to be able to configure multiple ranges of availability per day, some want a different sounding page bell, longer or shorter page attempts, etc, 
  4296. etc.  This statement, along with the <+!>PAGEON<-!> and <+!>PAGEOFF<-!> statements and the 
  4297. <+!>PAGESTAT()<-!> function, allow you to implement an operator page in any way desired.  Of course, the SysOp may still start a chat with the F10 key or by responding to the default O (operator page) command, and the 
  4298. <+!>CHAT<-!> statement may be used at anytime (although you'll generally want to avoid starting it unless you've confirmed that the SysOp is available since the user has no way to exit it himself).
  4299.  
  4300. @Small_Header@<:#259,9360>Examples
  4301.  
  4302. @Example_Text@<:#1590,9360>PAGEON<**>FOR i = 1 TO 10<**>  PRINT "@BEEP@"<**>  DELAY 18<**>  IF (KINKEY() = " ") THEN<**>    
  4303. <+!>CHAT<-!><**>    GOTO exit<**>  ENDIF<**>NEXT<**>:exit
  4304.  
  4305. @Small_Header@<:#259,9360>See Also
  4306.  
  4307. <:#240,9360><+!>PAGEOFF <+">Statement<-!><-"><+!>, <-!><+!>PAGEOFF <+">Statement<-!><-"><+!>, PAGESTAT() 
  4308. <+">Function<-"><-!><+!><-"><-">
  4309.  
  4310. <:p<* >>
  4311.  
  4312. @Subhead@<:#360,9360>CHR()   <+">Function<-">
  4313.  
  4314. @Small_Header@<:#259,9360>Function
  4315.  
  4316. <:#240,9360>Converts an ASCII code to a character.
  4317.  
  4318. @Small_Header@<:#259,9360>Syntax
  4319.  
  4320. <:#202,9360><:f,QCourier,>CHR(iexp)<:f>
  4321.  
  4322. @Indent_List@<:#240,9360>    <:f,QCourier,>iexp<:f>    Any integer expression between 0 and 255.
  4323.  
  4324. @Small_Header@<+@><:#259,9360>Return Type & Value
  4325.  
  4326. @Indent_List@<:#485,9360><+!>STRING<-!>    Returns a one character long string for ASCII codes from 1 to 255 or an empty string for ASCII code 0.
  4327.  
  4328. @Small_Header@<:#259,9360>Remarks
  4329.  
  4330. <:#1200,9360>In other languages (such as BASIC) you can have any of the 256 possible ASCII codes (0-255) in a string.  In PPL you are limited to 255 codes (1-255) because ASCII 0 is used to terminate strings and can't appear in the middle of a string.  So, if you ever g
  4331. et an empty string from this function, it is because you passed it a 0.  Any other value will return a valid string with a single character.
  4332.  
  4333. @Small_Header@<:#259,9360>Examples
  4334.  
  4335. @Example_Text@<:#642,9360>PRINTLN "The ASCII code for S is ",ASC("S")<**>' Convert a lowercase s to uppercase<**>STRING s<**>LET s = 
  4336. <+!>CHR(ASC("s")-ASC("a")+ASC("A"))<-!>
  4337.  
  4338. @Small_Header@<:#259,9360>See Also
  4339.  
  4340. <:#240,9360><+!>ASC() <+">Function<-"><-!><-"><-"><-">
  4341.  
  4342. <:p<* >>
  4343.  
  4344. @Subhead@<+@><:#360,9360>CLOSECAP   <+">Statement<-">
  4345.  
  4346. @Small_Header@<:#259,9360>Function
  4347.  
  4348. <:#240,9360>Close the screen capture file.
  4349.  
  4350. @Small_Header@<:#259,9360>Syntax
  4351.  
  4352. <:#202,9360><:f,QCourier,>CLOSECAP<:f>
  4353.  
  4354. @Indent_List@<:#240,9360>    No arguments are required
  4355.  
  4356. @Small_Header@<:#259,9360>Remarks
  4357.  
  4358. <:#2185,9360>PCBoard has the ability to capture screen output to a file for later reference.  PPL allows that same ability via the 
  4359. <+!>OPENCAP<-!> and <+!>CLOSECAP<-!> statements.  This could be useful in a program that executes a series of commands in non-stop mode.  The process could open a capture file first, execute the commands, close the capture file, then allow the user to view 
  4360. or download the capture file.  <+!>CLOSECAP<-!> closes the capture file and turns off screen capturing.  Also, the 
  4361. <+!>SHOWON<-!> and <+!>SHOWOFF<-!> statements can be used to turn on and off showing information to the screen while allowing that same information (even if not displayed or transmitted via modem) to be captured to a file.  The 
  4362. <+!>SHOWSTAT()<-!> function can be used to check the current status of the 
  4363. <+!>SHOWON<-!> and <+!>SHOWOFF<-!></`>statements.
  4364.  
  4365. @Small_Header@<:#259,9360>Examples
  4366.  
  4367. @Example_Text@<:#2212,9360>BOOLEAN ss<**>LET ss = SHOWSTAT()<**>SHOWOFF<**>OPENCAP "CAP"+STRING(PCBNODE()),ocFlag<**>IF (ocFlag) THEN<**>  DIR "U;NS"<+!><**>  CLOSECAP<-!><**>  KBDSTUFF "FLAG CAP"+STRING(PCBNODE())+CHR(13)<**>ENDIF<**>IF (ss) THEN<**>  SHOWON<**>ELSE<**>  SHOWOFF<**>
  4368. ENDIF
  4369.  
  4370. @Small_Header@<:#259,9360>See Also
  4371.  
  4372. <:#476,9360><+!>OPENCAP <+">Statement<-"><-!><+!>, SHOWOFF <+">Statement<-">, SHOWON 
  4373. <+">Statement<-">, SHOWSTAT() <+">Function<-"><-!>
  4374.  
  4375. <:p<* >>
  4376.  
  4377. @Subhead@<+@><:#360,9360>CLREOL   <+">Statement<-">
  4378.  
  4379. @Small_Header@<:#259,9360>Function
  4380.  
  4381. <:#240,9360>Clear the current line from the cursor to the end of the line using the current color.
  4382.  
  4383. @Small_Header@<:#259,9360>Syntax
  4384.  
  4385. <:#202,9360><:f,QCourier,>CLREOL<:f>
  4386.  
  4387. @Indent_List@<:#240,9360>    No arguments are required
  4388.  
  4389. @Small_Header@<:#259,9360>Remarks
  4390.  
  4391. <:#2400,9360>This statement will work one of two ways depending on the mode the caller is in.  If the caller is in graphics mode (or non-graphics ANSI-positioning) then PCBoard will issue the ANSI sequence to clear to the end of the line using the current color.  ANSI e
  4392. mulators, when written properly, will echo the color all the way to column 80 of the current line when they receive this ANSI sequence.  If the user is in non-graphics non-ANSI mode, PCBoard will write sufficient spaces to the display to move to column 80 a
  4393. nd then backspace to the original position.  Note that this will not clear the 80th column; the reason for this is to always keep the cursor on the current line.  If the cursor wrote a space to column 80 and moved to the beginning of the next line it wouldn
  4394. 't be able to move back up to the previous line without ANSI (which we already know we don't have).  This should be adequate for most applications.
  4395.  
  4396. @Small_Header@<:#259,9360>Examples
  4397.  
  4398. @Example_Text@<:#1264,9360>COLOR @X47<**>CLS<**>PRINT "This is some sample text.  (This will disappear.)"<**>WHILE (INKEY() = "") DELAY 1<**>BACKUP 22<**>COLOR @X1F<+!><**>CLREOL<-!><**>PRINT "This goes to the end of the line."
  4399.  
  4400. @Small_Header@<:#259,9360>See Also
  4401.  
  4402. <:#240,9360><+!>CLS <+">Statement<-"><-!>
  4403.  
  4404. <:p<* >>
  4405.  
  4406. @Subhead@<+@><:#360,9360>CLS   <+">Statement<-">
  4407.  
  4408. @Small_Header@<:#259,9360>Function
  4409.  
  4410. <:#240,9360>Clear the screen using the current color.
  4411.  
  4412. @Small_Header@<:#259,9360>Syntax
  4413.  
  4414. <:#202,9360><:f,QCourier,>CLS<:f>
  4415.  
  4416. @Indent_List@<:#240,9360>    No arguments are required
  4417.  
  4418. @Small_Header@<:#259,9360>Remarks
  4419.  
  4420. <:#1680,9360>This statement will work one of two ways depending on the mode the caller is in.  If the caller is in graphics mode (or non-graphics ANSI-positioning) then PCBoard will issue the ANSI sequence to clear to the screen using the current color.  If the user is 
  4421. in non-graphics non-ANSI mode, PCBoard will write send an ASCII 12 (form feed) character to the remote terminal in a last ditch effort to clear the remote callers screen.  Many terminal programs do support this, but not all, so be aware that callers may see
  4422.  the ASCII 12 instead of a clear screen.
  4423.  
  4424. @Small_Header@<:#259,9360>Examples
  4425.  
  4426. @Example_Text@<:#1264,9360>COLOR @X47<+!><**>CLS<-!><**>PRINT "This is some sample text.  (This will disappear.)"<**>WHILE (INKEY() = "") DELAY 1<**>BACKUP 22<**>COLOR @X1F<**>CLREOL<**>PRINT "This goes to the end of the line."
  4427.  
  4428. @Small_Header@<:#259,9360>See Also
  4429.  
  4430. <:#240,9360><+!>CLREOL <+">Statement<-"><-!>
  4431.  
  4432. <:p<* >>
  4433.  
  4434. @Subhead@<+@><:#360,9360>COLOR   <+">Statement<-">
  4435.  
  4436. @Small_Header@<:#259,9360>Function
  4437.  
  4438. <:#240,9360>Change the current active color.
  4439.  
  4440. @Small_Header@<:#259,9360>Syntax
  4441.  
  4442. <:#202,9360><:f,QCourier,>COLOR newcolor<:f>
  4443.  
  4444. @Indent_List@<:#480,9360>    <:f,QCourier,>newcolor<:f>    An integer expression containing the new color to be used by PCBoard and the remote terminal software.
  4445.  
  4446. @Small_Header@<:#259,9360>Remarks
  4447.  
  4448. <:#960,9360>This statement will change the color in use by PCBoard and send the appropriate ANSI sequence to change color to the remote terminal software.  Note that this statement will only affect a color change if the user is in graphics mode.  If the user is in non-
  4449. graphics mode this statement will be ignored.
  4450.  
  4451. @Small_Header@<:#259,9360>Examples
  4452.  
  4453. @Example_Text@<:#1264,9360><+!>COLOR @X47<-!><**>CLS<**>PRINT "This is some sample text.  (This will disappear.)"<**>WHILE (INKEY() = "") DELAY 1<**>BACKUP 22<+!><**>COLOR @X1F<-!><**>CLREOL<**>PRINT "This goes to the end of the line."
  4454.  
  4455. @Small_Header@<:#259,9360>See Also
  4456.  
  4457. <:#240,9360><+!>DEFCOLOR <+">Statement<-">, DEFCOLOR() <+">Function<-"><-!>
  4458.  
  4459. <:p<* >>
  4460.  
  4461. @Subhead@<+@><:#360,9360>CONFFLAG   <+">Statement<-">
  4462.  
  4463. @Small_Header@<:#259,9360>Function
  4464.  
  4465. <:#240,9360>Set specified flags in the current conference for the current user.
  4466.  
  4467. @Small_Header@<:#259,9360>Syntax
  4468.  
  4469. <:#202,9360><:f,QCourier,>CONFFLAG confnum,flags<:f>
  4470.  
  4471. @Indent_List@<:#240,9360>    <:f,QCourier,>confnum<:f>    An integer expression containing the conference number to affect.
  4472.  
  4473. @Indent_List@<:#240,9360>    <:f,QCourier,>flags<:f>    An integer expression containing the flags to set.
  4474.  
  4475. @Small_Header@<:#259,9360>Remarks
  4476.  
  4477. <:#1685,9360>Each user on the BBS has a set of five flags for each conference that control various settings.  These flags control the users registration in a conference, their expired status in a conference, whether or not they have a conference selected, whether or not
  4478.  they have mail waiting in a conference, and whether or not they have SysOp priviledges in a conference.  Any or all of these flags may be set at once.  To assist you in using this statement, five predefined constants are available to specify each flag:  
  4479. <+!>F_REG<-!>, <+!>F_EXP<-!>, <+!>F_SEL<-!>, <+!>F_MW<-!>, and <+!>F_SYS<-!>.  To use these constants simply add the ones you need together.
  4480.  
  4481. @Small_Header@<:#259,9360>Examples
  4482.  
  4483. @Example_Text@<:#1284,9360>' Automatically register them in selected conferences<**>INTEGER i<**>FOR i = 1 TO 10<**>  
  4484. <+!>CONFFLAG i,F_REG+F_EXP+F_SEL<-!><**>NEXT<**>FOR i = 11 TO 20<**>  
  4485. <+!>CONFFLAG i,F_REG+F_SEL<-!><**>NEXT
  4486.  
  4487. @Small_Header@<:#259,9360>See Also
  4488.  
  4489. <:#480,9360><+!>CONFUNFLAG<+"> Statement<-">, F_EXP <+">Constant<-">, F_MW <+">Constant<-">, F_REG 
  4490. <+">Constant<-">, F_SEL <+">Constant<-">, F_SYS <+">Constant<-"><-!><-">
  4491.  
  4492. <:p<* >>
  4493.  
  4494. @Subhead@<+@><:#360,9360>CONFUNFLAG   <+">Statement<-">
  4495.  
  4496. @Small_Header@<:#259,9360>Function
  4497.  
  4498. <:#240,9360>Clear specified flags in the current conference for the current user.
  4499.  
  4500. @Small_Header@<:#259,9360>Syntax
  4501.  
  4502. <:#202,9360><:f,QCourier,>CONFUNFLAG confnum,flags<:f>
  4503.  
  4504. @Indent_List@<:#240,9360>    <:f,QCourier,>confnum<:f>    An integer expression containing the conference number to affect.
  4505.  
  4506. @Indent_List@<:#240,9360>    <:f,QCourier,>flags<:f>    An integer expression containing the flags to clear.
  4507.  
  4508. @Small_Header@<:#259,9360>Remarks
  4509.  
  4510. <:#1685,9360>Each user on the BBS has a set of five flags for each conference that control various settings.  These flags control the users registration in a conference, their expired status in a conference, whether or not they have a conference selected, whether or not
  4511.  they have mail waiting in a conference, and whether or not they have SysOp priviledges in a conference.  Any or all of these flags may be cleared at once.  To assist you in using this statement, five predefined constants are available to specify each flag:
  4512.   <+!>F_REG<-!>, <+!>F_EXP<-!>, <+!>F_SEL<-!>, <+!>F_MW<-!>, and <+!>F_SYS<-!>.  To use these constants simply add the ones you need together.
  4513.  
  4514. @Small_Header@<:#259,9360>Examples
  4515.  
  4516. @Example_Text@<:#1284,9360>' Automatically deregister them from selected conferences<**>INTEGER i<**>FOR i = 1 TO 10<**>  
  4517. <+!>CONFUNFLAG i,F_REG+F_EXP+F_SEL<-!><**>NEXT<**>FOR i = 11 TO 20<**>  
  4518. <+!>CONFUNFLAG i,F_REG+F_SEL<-!><**>NEXT
  4519.  
  4520. @Small_Header@<:#259,9360>See Also
  4521.  
  4522. <:#480,9360><+!>CONFFLAG<+"> Statement<-">, F_EXP <+">Constant<-">, F_MW <+">Constant<-">, F_REG 
  4523. <+">Constant<-">, F_SEL <+">Constant<-">, F_SYS <+">Constant<-"><-!><-">
  4524.  
  4525. <:p<* >>
  4526.  
  4527. @Subhead@<+@><:#360,9360>CURCOLOR()   <+">Function<-">
  4528.  
  4529. @Small_Header@<+@><:#259,9360>Function
  4530.  
  4531. <+@><:#240,9360>Returns the color in use by the ANSI driver.
  4532.  
  4533. @Small_Header@<+@><:#259,9360>Syntax
  4534.  
  4535. <+@><:#202,9360><:f,QCourier,>CURCOLOR<:f><:f,QCourier,>()<:f>
  4536.  
  4537. @Indent_List@<+@><:#240,9360>    No arguments are required
  4538.  
  4539. @Small_Header@<+@><:#259,9360>Return Type & Value
  4540.  
  4541. @Indent_List@<:#245,9360><+!>INTEGER<-!>    Returns the color code most recently issued to the ANSI driver.<-">
  4542.  
  4543. @Small_Header@<+@><:#259,9360>Remarks
  4544.  
  4545. <:#1200,9360>The @X code processor within PCBoard has the ability to save and restore color codes built in.  PCBoard accomplishes this by saving the current color whenever it encounters an @X00 and reissuing the color change when it encounters an @XFF.  Unfortunately, P
  4546. CBoard will only remember one color at a time.  With this function you can save and restore as many colors as your application needs.
  4547.  
  4548. @Small_Header@<+@><:#259,9360>Examples
  4549.  
  4550. @Example_Text@<:#4276,9360>INTEGER cc,x,y<**>COLOR @X0F<**>ANSIPOS 26,23<**>PRINT "Hit the SPACE BAR to continue"<**>WHILE (KINKEY() <<<;> " ") DO<**>  CLS<**>  LET x = 1+RANDOM(57)<**>  LET y = 1+RANDOM(21)<**>  PUSH 1+RANDOM(14)<**>  GOSUB sub<**>  LET cc = 
  4551. <+!>CURCOLOR()<-!><**>  PUSH @X0F<**>  GOSUB sub<**>  PUSH cc<**>  GOSUB sub<**>  ANSIPOS 1,y<**>  CLREOL<**>ENDWHILE<**><**>:sub<**>INTEGER c<**>POP c<**>COLOR c<**>ANSIPOS x,y<**>PRINT "PCBoard 15.0 with PPL!"<**>DELAY 18<**>RETURN
  4552.  
  4553. @Small_Header@<+@><:#259,9360>See Also
  4554.  
  4555. <+@><:#240,9360><-"><-!>
  4556.  
  4557. <+@><:p<* >>
  4558.  
  4559. @Subhead@<:#360,9360>CURCONF()   <+">Function<-">
  4560.  
  4561. @Small_Header@<:#259,9360>Function
  4562.  
  4563. <:#240,9360>Get the current conference number.
  4564.  
  4565. @Small_Header@<:#259,9360>Syntax
  4566.  
  4567. <:#202,9360><:f,QCourier,>CURCONF<:f><:f,QCourier,>(<:f><:f,QCourier,>)<:f>
  4568.  
  4569. @Indent_List@<:#240,9360>    No arguments are required
  4570.  
  4571. @Small_Header@<:#259,9360>Return Type & Value
  4572.  
  4573. @Indent_List@<:#245,9360><+!>INTEGER<-!>    Returns an integer with the current conference number.
  4574.  
  4575. @Small_Header@<:#259,9360>Remarks
  4576.  
  4577. <:#1200,9360>This function can be useful in configuring a PPL program to work in different ways in different conferences.  As a quick example, we have a PPE file on Salt Air that interfaces with the enter message command.  If a user is in certain conferences we prompt t
  4578. hem for additional information that we will likely need, otherwise we skip to the normal enter message process.  Of course, that's just one example; you are sure to have other uses for it.
  4579.  
  4580. @Small_Header@<:#259,9360>Examples
  4581.  
  4582. @Example_Text@<:#958,9360>IF (<+!>CURCONF()<-!> = 6) THEN ' The Salt Air beta conference is 6<**>  PRINTLN "You are leaving a message in the beta conference."<**>  PRINTLN "Be sure to leave your file date and time"<**>  PRINTLN "and a complete description of the problem."<**>ENDIF<**>
  4583. KBDSTUFF TOKENSTR()
  4584.  
  4585. @Small_Header@<:#259,9360>See Also
  4586.  
  4587. <:#240,9360><-"><-">
  4588.  
  4589. <:p<* >>
  4590.  
  4591. @Subhead@<:#360,9360>CURSEC()   <+">Function<-">
  4592.  
  4593. @Small_Header@<:#259,9360>Function
  4594.  
  4595. <:#240,9360>Get the users current security level.
  4596.  
  4597. @Small_Header@<:#259,9360>Syntax
  4598.  
  4599. <:#202,9360><:f,QCourier,>CURSEC<:f><:f,QCourier,>(<:f><:f,QCourier,>)<:f>
  4600.  
  4601. @Indent_List@<:#240,9360>    No arguments are required
  4602.  
  4603. @Small_Header@<:#259,9360>Return Type & Value
  4604.  
  4605. @Indent_List@<:#245,9360><+!>INTEGER<-!>    Returns an integer with the current security level of the user.
  4606.  
  4607. @Small_Header@<:#259,9360>Remarks
  4608.  
  4609. <:#1210,9360>Although the users primary security level may be accessed via the 
  4610. <+!>U_SEC<-!> variable after using the <+!>GETUSER<-!> statement, it is often necessary to know the users security level right now after taking into account whether or not they have expired access, additional security from joining a specific conference, or 
  4611. additional security from the keyboard.  This function will take all variables into account and return the current 'logical' security level.
  4612.  
  4613. @Small_Header@<:#259,9360>Examples
  4614.  
  4615. @Example_Text@<:#168,9360>IF (<+!>CURSEC()<-!> << 100) PRINTLN "Insufficient security!"
  4616.  
  4617. @Small_Header@<:#259,9360>See Also
  4618.  
  4619. <:#240,9360><-"><-">
  4620.  
  4621. <:p<* >>
  4622.  
  4623. @Subhead@<:#360,9360>DATE   <+">Type<-">
  4624.  
  4625. @Small_Header@<:#259,9360>Function
  4626.  
  4627. <:#240,9360>Declare one or more variables of type date.
  4628.  
  4629. @Small_Header@<:#259,9360>Syntax
  4630.  
  4631. <:#202,9360><:f200,QCourier,>DATE var|arr(s<[>,s<[>,s]])<[>,var|arr(s<[>,s<[>,s]])]<:f>
  4632.  
  4633. @Indent_List@<:#720,9360>    <:f,QCourier,>var<:f>    The name of a variable to declare.  Must start with a letter <[>A-Z] which may be followed by letters, digits <[>0-9] or the underscore <[>_].  May be of any length but only the first 32 characters are used.
  4634.  
  4635. @Indent_List@<:#480,9360>    <:f,QCourier,>arr<:f>    The name of an array variable to declare.  The same naming conventions as var are used.
  4636.  
  4637. @Indent_List@<:#480,9360>    <:f,QCourier,>s<:f>    The size (0-based) of an array variable dimension.  Any constant integer expression is allowed.
  4638.  
  4639. @Small_Header@<:#259,9360>Remarks
  4640.  
  4641. <:#2915,9360><+!>DATE<-!> variables are stored as julian dates.  Valid dates are 0 (a special case to represent an invalid date) and 1 (1 JAN 1900) through 36524 (31 DEC 1999) through 65535 (5 JUN 2079).  It is stored internally as a two byte unsigned integer.  If a 
  4642. <+!>DATE<-!> is assigned to or from an <+!>INTEGER<-!> type then the julian date (0-65535) is assigned.  If a 
  4643. <+!>DATE<-!> is assigned to a <+!>STRING<-!> type then it is automatically converted to the following format:  "MM/DD/YY", where MM is the two digit month (01-12), DD is the two digit day of the month (01-31), and YY is the two digit year (00-99).  If a for
  4644. eign language is in use that uses a different date format (for example, "DD/MM/YY" or "YY.MM.DD") then that will be taken into account.  If a 
  4645. <+!>STRING<-!></`>is assigned to a <+!>DATE<-!> then PPL will do it's best to convert the string back to the appropriate julian date.  However, dates before 1980 will not be handled correctly because only a two digit year is used in strings.  All other type
  4646. s, when assigned to or from a <+!>DATE<-!>, will be converted to an 
  4647. <+!>INTEGER<-!> first before being assigned to or from the <+!>DATE<-!> type.
  4648.  
  4649. @Small_Header@<:#259,9360>Examples
  4650.  
  4651. @Example_Text@<:#158,9360><+!>DATE dob, today, range(2), leapYears(50)<-!>
  4652.  
  4653. @Small_Header@<:#259,9360>See Also
  4654.  
  4655. <:#240,9360><+!>BOOLEAN <+">Type<-">, INTEGER <+">Type<-">, MONEY <+">Type<-">, STRING 
  4656. <+">Type<-">, TIME <+">Type<-"><-!><-"><-"><-"><-"><-">
  4657.  
  4658. <:p<* >>
  4659.  
  4660. @Subhead@<:#360,9360>DATE()   <+">Function<-">
  4661.  
  4662. @Small_Header@<:#259,9360>Function
  4663.  
  4664. <:#240,9360>Get today's date.
  4665.  
  4666. @Small_Header@<:#259,9360>Syntax
  4667.  
  4668. <:#202,9360><:f,QCourier,>DATE<:f><:f,QCourier,>(<:f><:f,QCourier,>)<:f>
  4669.  
  4670. @Indent_List@<:#240,9360>    No arguments are required
  4671.  
  4672. @Small_Header@<:#259,9360>Return Type & Value
  4673.  
  4674. @Indent_List@<:#245,9360><+!>DATE<-!>    Returns a date for today.
  4675.  
  4676. @Small_Header@<:#259,9360>Remarks
  4677.  
  4678. <:#720,9360>The date returned is represented internally in a julian format (the number of days since January 1, 1900).  It may be used as is (for display, storage or as an argument to another function or statement) or assigned to an integer for arithmetic purposes.
  4679.  
  4680. @Small_Header@<:#259,9360>Examples
  4681.  
  4682. @Example_Text@<:#168,9360>PRINTLN "Today is ",<+!>DATE()<-!>
  4683.  
  4684. @Small_Header@<:#259,9360>See Also
  4685.  
  4686. <:#240,9360><-"><-">
  4687.  
  4688. <:p<* >>
  4689.  
  4690. @Subhead@<:#360,9360>DAY()   <+">Function<-">
  4691.  
  4692. @Small_Header@<:#259,9360>Function
  4693.  
  4694. <:#240,9360>Extracts the day of the month from a date.
  4695.  
  4696. @Small_Header@<:#259,9360>Syntax
  4697.  
  4698. <:#202,9360><:f,QCourier,>DAY(dexp)<:f>
  4699.  
  4700. @Indent_List@<:#240,9360>    <:f,QCourier,>dexp<:f>    Any date expression.
  4701.  
  4702. @Small_Header@<+@><:#259,9360>Return Type & Value
  4703.  
  4704. @Indent_List@<:#485,9360><+!>INTEGER<-!>    Returns the day of the month from the specified date expression (dexp).  Valid return values are from 1 to 31.
  4705.  
  4706. @Small_Header@<:#259,9360>Remarks
  4707.  
  4708. <:#485,9360>This function allows you to extract a particular piece of information about a 
  4709. <+!>DATE<-!> value, in this case the day of the month of the date.
  4710.  
  4711. @Small_Header@<:#259,9360>Examples
  4712.  
  4713. @Example_Text@<:#168,9360>PRINTLN "Today is:  ",<+!>DAY(DATE())<-!>
  4714.  
  4715. @Small_Header@<:#259,9360>See Also
  4716.  
  4717. <:#240,9360><+!>DOW() <+">Function<-">, <-!><+!>MONTH() <+">Function<-">, YEAR<+!>() 
  4718. <+">Function<-"><-"><-"><-">
  4719.  
  4720. <:p<* >>
  4721.  
  4722. @Subhead@<+@><:#360,9360>DBGLEVEL   <+">Statement<-">
  4723.  
  4724. @Small_Header@<:#259,9360>Function
  4725.  
  4726. <:#240,9360>Set a new debug level for PCBoard.
  4727.  
  4728. @Small_Header@<:#259,9360>Syntax
  4729.  
  4730. <:#202,9360><:f,QCourier,>DBGLEVEL<:f><:f,QCourier,> level<:f>
  4731.  
  4732. @Indent_List@<:#240,9360>    <:f,QCourier,>level<:f>    An integer expression with the new debug level.
  4733.  
  4734. @Small_Header@<:#259,9360>Remarks
  4735.  
  4736. <:#1200,9360>PCBoard supports an internal variable that allows debug information to be written to the callers log.  Level 0 specified no debug information.  Levels 1 through 3 specify different (increasing) levels of debug information.  It can also be useful for debuggi
  4737. ng your PPL programs.  This statement allows you to change the PCBoard debug level on the fly without the need to have the SysOp exit and change it in the BOARD.BAT file.
  4738.  
  4739. @Small_Header@<:#259,9360>Examples
  4740.  
  4741. @Example_Text@<:#632,9360>INTEGER newlvl<**>INPUT "New level",newlvl<**>NEWLINE<**>DBGLEVEL newlvl
  4742.  
  4743. @Small_Header@<:#259,9360>See Also
  4744.  
  4745. <:#240,9360><-"><-"><-"><-"><+!>DBGLEVEL() <+">Function<-">, <-!><+!>LOG <+">Statement<-!><-">
  4746.  
  4747. <:p<* >>
  4748.  
  4749. @Subhead@<+@><:#360,9360>DBGLEVEL()   <+">Function<-">
  4750.  
  4751. @Small_Header@<+@><:#259,9360>Function
  4752.  
  4753. <+@><:#240,9360>Returns the debug level in effect.
  4754.  
  4755. @Small_Header@<+@><:#259,9360>Syntax
  4756.  
  4757. <+@><:#202,9360><:f,QCourier,>DBGLEVEL<:f><:f,QCourier,>()<:f>
  4758.  
  4759. @Indent_List@<+@><:#240,9360>    No arguments are required
  4760.  
  4761. @Small_Header@<+@><:#259,9360>Return Type & Value
  4762.  
  4763. @Indent_List@<:#245,9360><+!>INTEGER<-!>    Returns the current debug level.<-">
  4764.  
  4765. @Small_Header@<+@><:#259,9360>Remarks
  4766.  
  4767. <:#1200,9360>PCBoard supports an internal variable that allows debug information to be written to the callers log.  Level 0 specified no debug information.  Levels 1 through 3 specify different (increasing) levels of debug information.  It can also be useful for debuggi
  4768. ng your PPL programs.  Using this function you can tie your debug information to a specified debug level of your choosing.
  4769.  
  4770. @Small_Header@<+@><:#259,9360>Examples
  4771.  
  4772. @Example_Text@<:#168,9360>IF (<+!>DBGLEVEL()<-!> = 1) LOG "Writing DEBUG info for "+PPENAME(),0
  4773.  
  4774. @Small_Header@<+@><:#259,9360>See Also
  4775.  
  4776. <:#240,9360><-"><-!><+!>DBGLEVEL <+">Statement<-">, <-!><+!>LOG <+">Statement<-"><-!><-">
  4777.  
  4778. <+@><:p<* >>
  4779.  
  4780. @Subhead@<+@><:#360,9360>DEC   <+">Statement<-">
  4781.  
  4782. @Small_Header@<:#259,9360>Function
  4783.  
  4784. <:#240,9360>Decrement the value of a variable.
  4785.  
  4786. @Small_Header@<:#259,9360>Syntax
  4787.  
  4788. <:#202,9360><:f,QCourier,>DEC<:f><:f,QCourier,> var<:f>
  4789.  
  4790. @Indent_List@<:#240,9360>    <:f,QCourier,>var<:f>    The variable with the value to decrement.
  4791.  
  4792. @Small_Header@<:#259,9360>Remarks
  4793.  
  4794. <:#960,9360>Many programs require extensive addition and subtraction, and most often, a value is increased or decreased by 1.  This statement allows for a shorter, more efficient method of decreasing (decrementing) a value by 1 than subtracting 1 from a variable and as
  4795. signing the result to the same variable.
  4796.  
  4797. @Small_Header@<:#259,9360>Examples
  4798.  
  4799. @Example_Text@<:#1116,9360>INTEGER i<**>PRINTLN "Countdown:"<**>LET i = 10<**>WHILE (i <;>= 0) DO<**>  PRINTLN "T minus ",i<**>  
  4800. <+!>DEC i<-!><**>ENDWHILE
  4801.  
  4802. @Small_Header@<:#259,9360>See Also
  4803.  
  4804. <:#240,9360><+!>INC <+">Statement<-"><-!><-"><-">
  4805.  
  4806. <:p<* >>
  4807.  
  4808. @Subhead@<+@><:#360,9360>DEFCOLOR   <+">Statement<-">
  4809.  
  4810. @Small_Header@<:#259,9360>Function
  4811.  
  4812. <:#240,9360>Change the current color to the system default color.
  4813.  
  4814. @Small_Header@<:#259,9360>Syntax
  4815.  
  4816. <:#202,9360><:f,QCourier,>DEFCOLOR<:f>
  4817.  
  4818. @Indent_List@<:#240,9360>    No arguments are required
  4819.  
  4820. @Small_Header@<:#259,9360>Remarks
  4821.  
  4822. <:#1205,9360>This statement will change the color in use by PCBoard to the system default and send the appropriate ANSI sequence to change color to the remote terminal software.  This statement is equivalent to 
  4823. <+!>COLOR DEFCOLOR()<-!>.  Note that this statement will only affect a color change if the user is in graphics mode.  If the user is in non-graphics mode this statement will be ignored.
  4824.  
  4825. @Small_Header@<:#259,9360>Examples
  4826.  
  4827. @Example_Text@<:#1264,9360>COLOR @X47<**>CLS<**>PRINT "This is some sample text.  (This will disappear.)"<**>WHILE (INKEY() = "") DELAY 1<**>BACKUP 22<**><+!>DEFCOLOR<-!><**>CLREOL<**>PRINT "This goes to the end of the line."
  4828.  
  4829. @Small_Header@<:#259,9360>See Also
  4830.  
  4831. <:#240,9360><+!>COLOR <+">Statement<-!><-"><+!><-">, DEFCOLOR() <+">Function<-!><-">
  4832.  
  4833. <:p<* >>
  4834.  
  4835. @Subhead@<:#360,9360>DEFCOLOR()   <+">Function<-">
  4836.  
  4837. @Small_Header@<:#259,9360>Function
  4838.  
  4839. <:#240,9360>Return the system default color.
  4840.  
  4841. @Small_Header@<:#259,9360>Syntax
  4842.  
  4843. <:#202,9360><:f,QCourier,>DEFCOLOR<:f><:f,QCourier,>(<:f><:f,QCourier,>)<:f>
  4844.  
  4845. @Indent_List@<:#240,9360>    No arguments are required
  4846.  
  4847. @Small_Header@<:#259,9360>Return Type & Value
  4848.  
  4849. @Indent_List@<:#245,9360><+!>INTEGER<-!>    Returns the system default color as defined in PCBSetup.
  4850.  
  4851. @Small_Header@<:#259,9360>Remarks
  4852.  
  4853. <:#965,9360>This function is useful in cases where you must pass a color to a statement but you want to honor the SysOp's choice of default color for the system.  In that case you cannot use the 
  4854. <+!>DEFCOLOR<-!> statement because it does not return a value that you can pass to another statement.
  4855.  
  4856. @Small_Header@<:#259,9360>Examples
  4857.  
  4858. @Example_Text@<:#958,9360>STRING yn<**>DEFCOLOR<**>CLS<**>LET yn = YESCHAR()<**>INPUTYN "Continue",yn,<+!>DEFCOLOR()<-!><**>IF (yn = NOCHAR()) END
  4859.  
  4860. @Small_Header@<:#259,9360>See Also
  4861.  
  4862. <:#240,9360><-"><-"><+!>COLOR <+">Statement<-">, DEFCOLOR <+">Statement<-"><-!>
  4863.  
  4864. <:p<* >>
  4865.  
  4866. @Subhead@<:#360,9360>DEFS   <+">Constant<-">
  4867.  
  4868. @Small_Header@<:#259,9360>Function
  4869.  
  4870. <:#240,9360>Used when no special statement parameters or flags are needed and defaults are sufficient.
  4871.  
  4872. @Small_Header@<:#259,9360>Value
  4873.  
  4874. <:#240,9360>0 = 0b = 0o = 0h
  4875.  
  4876. @Small_Header@<:#259,9360>Remarks
  4877.  
  4878. <:#720,9360>There are many statements that take special values as parameters or flags as an indication to do some special processing.  This constant is meant to be used by itself when you do not need any other special constant value.
  4879.  
  4880. @Small_Header@<:#259,9360>Examples
  4881.  
  4882. @Example_Text@<:#642,9360>STRING ans<**>LET ans = NOCHAR()<**>INPUTSTR "Run program now",ans,@X0E,1,"YyNn",<+!>DEFS<-!><**>IF (UPPER(ans) = NOCHAR()) END
  4883.  
  4884. @Small_Header@<:#259,9360>See Also
  4885.  
  4886. <:#240,9360><-"><-"><-"><-"><-"><-"><-">
  4887.  
  4888. <:p<* >>
  4889.  
  4890. @Subhead@<+@><:#360,9360>DELAY   <+">Statement<-">
  4891.  
  4892. @Small_Header@<:#259,9360>Function
  4893.  
  4894. <:#240,9360>Pause execution for a specified period of clock ticks.
  4895.  
  4896. @Small_Header@<:#259,9360>Syntax
  4897.  
  4898. <:#202,9360><:f,QCourier,>DELAY<:f><:f,QCourier,> ticks<:f>
  4899.  
  4900. @Indent_List@<:#240,9360>    <:f,QCourier,>ticks<:f>    An integer expression with the number of clock ticks to pause.
  4901.  
  4902. @Small_Header@<:#259,9360>Remarks
  4903.  
  4904. <:#1445,9360>It is often desireable to wait for a precise time interval for various purposes.  This function will allow you to specify an interval to delay in clock ticks.  One clock tick is approximately 1/18.2 of a second.  So to delay for approximately one second, yo
  4905. u should use <+!>DELAY 18<-!>.  The basic formula to use is (seconds to delay*18.2) and then round off to the nearest whole number.  Note however that PPL doesn't support floating point arithmetic, so if you want to calculate the delay interval at run time 
  4906. you should use something like (seconds to delay*182)/10.
  4907.  
  4908. @Small_Header@<:#259,9360>Examples
  4909.  
  4910. @Example_Text@<:#1264,9360>INTEGER i<**>PRINTLN "Countdown:"<**>LET i = 10<**>WHILE (i <;>= 0) DO<**>  PRINTLN "T minus ",i<**>  DEC i<+!><**>  DELAY 18<-!><**>ENDWHILE
  4911.  
  4912. @Small_Header@<:#259,9360>See Also
  4913.  
  4914. <:#240,9360><-"><-"><-">
  4915.  
  4916. <:p<* >>
  4917.  
  4918. @Subhead@<+@><:#360,9360>DELETE   <+">Statement<-">
  4919.  
  4920. @Small_Header@<:#259,9360>Function
  4921.  
  4922. <:#240,9360>Delete a specified file from the disk it resides on.
  4923.  
  4924. @Small_Header@<:#259,9360>Syntax
  4925.  
  4926. <:#202,9360><:f,QCourier,>DELETE<:f><:f,QCourier,> file<:f>
  4927.  
  4928. @Indent_List@<:#240,9360>    <:f,QCourier,>file<:f>    A string expression with the drive, path and file name to delete.
  4929.  
  4930. @Small_Header@<:#259,9360>Remarks
  4931.  
  4932. <:#725,9360>It is always a good idea to leave things as you found them (as much as possible).  This statement allows you to delete temporary files created by your PPE with the 
  4933. <+!>FCREATE<-!>/<+!>FOPEN<-!>/<+!>FAPPEND<-!> statements.
  4934.  
  4935. @Small_Header@<:#259,9360>Examples
  4936.  
  4937. @Example_Text@<:#3476,9360>INTEGER retcode<**>STRING  s<**>FCREATE 1,"TMP.LST",O_WR,S_DB<**>LET s = "START"<**>WHILE (LEN(s) <;> 0) DO<**>  LET s = ""<**>  PRINTLN "Enter a name or ENTER alone to quit:"<**>  INPUT "Name",s<**>  IF (LEN(s) <;> 0) FPUTLN 1,s<**>ENDWHILE<**>FCLOSE 1<**>
  4938. SHELL 1,retcode,"SORT","<< TMP.LST <;> TMP.SRT"<**>NEWLINE<**>PRINTLN "Unsorted List:"<**>PRINTLN "--------------"<**>DISPFILE "TMP.LST",DEFS<**>NEWLINE<**>PRINTLN "Sorted List:"<**>PRINTLN "--------------"<**>DISPFILE "TMP.SRT",DEFS<+!><**>DELETE "TMP.LST"
  4939. <**>DELETE "TMP.SRT"<-!>
  4940.  
  4941. @Small_Header@<:#259,9360>See Also
  4942.  
  4943. <:#240,9360><-"><-"><-"><+!>RENAME <+">Statement<-"><-!>
  4944.  
  4945. <:p<* >>
  4946.  
  4947. @Subhead@<+@><:#360,9360>DELUSER   <+">Statement<-">
  4948.  
  4949. @Small_Header@<:#259,9360>Function
  4950.  
  4951. <:#240,9360>Flag the user online on the current node for deletion.
  4952.  
  4953. @Small_Header@<:#259,9360>Syntax
  4954.  
  4955. <:#202,9360><:f,QCourier,>DELUSER<:f>
  4956.  
  4957. @Indent_List@<:#240,9360>    No arguments are required
  4958.  
  4959. @Small_Header@<:#259,9360>Remarks
  4960.  
  4961. <:#1215,9360>This statement will set the delete user record flag to <+!>TRUE<-!>.  This will merely flag PCBSystemManager to pack out the user during the next pack operation.  If you want to make sure the user doesn't log back in before being packed out, use 
  4962. <+!>GETUSER<-!>, set his <+!>U_SEC<-!> and <+!>U_EXPSEC<-!> variables to 0, and use the 
  4963. <+!>PUTUSER<-!> statement to write the changes to the user record.
  4964.  
  4965. @Small_Header@<:#259,9360>Examples
  4966.  
  4967. @Example_Text@<:#1590,9360>GETUSER<**>IF (U_CMNT2 = "BAD USER") THEN<**>  PRINTLN "Just a friendly note to say,"<**>  PRINTLN "I hope you have a rotten day!"<**>  PRINTLN "Proceeding with automatic user record deletion..."<**>  
  4968. <+!>DELUSER<-!><**>  LET U_SEC = 0<**>  LET U_EXPSEC = 0<**>  PUTUSER<**>ENDIF
  4969.  
  4970. @Small_Header@<:#259,9360>See Also
  4971.  
  4972. <:#240,9360>
  4973.  
  4974. <:p<* >>
  4975.  
  4976. @Subhead@<+@><:#360,9360>DIR   <+">Statement<-">
  4977.  
  4978. @Small_Header@<:#259,9360>Function
  4979.  
  4980. <:#240,9360>Execute the file directories command with desired sub-commands.
  4981.  
  4982. @Small_Header@<:#259,9360>Syntax
  4983.  
  4984. <:#202,9360><:f,QCourier,>DIR<:f><:f,QCourier,> cmds<:f>
  4985.  
  4986. @Indent_List@<:#480,9360>    <:f,QCourier,>cmds<:f>    A string expression with any desired sub-commands for the file directory command.
  4987.  
  4988. @Small_Header@<:#259,9360>Remarks
  4989.  
  4990. <:#1205,9360>This statement will allow you to access file directories (the F command from the main menu), and any file directory sub-commands, under PPE control.  Note that this statement will destroy any previously tokenized string expression.  If you have string token
  4991. s pending at the time of the <+!>DIR<-!> statment you should save them first and then retokenize after the 
  4992. <+!>DIR<-!> statement is complete.
  4993.  
  4994. @Small_Header@<:#259,9360>Examples
  4995.  
  4996. @Example_Text@<:#1422,9360>INTEGER retcode<**>SHOWOFF <**>OPENCAP "NEWFILES.LST",retcode<**>KBDSTUFF CHR(13)<+!><**>DIR "N;S;A;NS"<-!><**>CLOSECAP<**>SHOWON<**>SHELL TRUE,retcode,"PKZIP","-mex NEWFILES NEWFILES.LST"<**>KBDSTUFF "FLAG NEWFILES.ZIP"
  4997.  
  4998. @Small_Header@<:#259,9360>See Also
  4999.  
  5000. <:#240,9360><-"><-"><-"><-">
  5001.  
  5002. <:p<* >>
  5003.  
  5004. @Subhead@<+@><:#360,9360>DISPFILE   <+">Statement<-">
  5005.  
  5006. @Small_Header@<:#259,9360>Function
  5007.  
  5008. <:#240,9360>Display a specified (or alternate) file.
  5009.  
  5010. @Small_Header@<:#259,9360>Syntax
  5011.  
  5012. <:#202,9360><:f,QCourier,>DISPFILE<:f><:f,QCourier,> file,flags<:f>
  5013.  
  5014. @Indent_List@<:#240,9360>    <:f,QCourier,>file<:f>    A string expression with the file name (or base file name) to display.
  5015.  
  5016. @Indent_List@<:#240,9360>    <:f,QCourier,>flags<:f>    An integer expression with alternate file flags.
  5017.  
  5018. @Small_Header@<:#259,9360>Remarks
  5019.  
  5020. <:#1210,9360>This statement will allow you to display a file to the user, and optionally to have PCBoard look for alternate security, graphics, and/or language specific files.  The flags parameter should be 0 for no alternate searching, 
  5021. <+!>GRAPH<-!> (1) for graphics specific searching, <+!>SEC<-!> (2) for security specific searching, 
  5022. <+!>LANG<-!> (4) for language specific searching, or any combination thereof for multiple alternate searches simultaneously.
  5023.  
  5024. @Small_Header@<:#259,9360>Examples
  5025.  
  5026. @Example_Text@<:#474,9360>STRING s<+!><**>DISPFILE "MNUA",SEC+GRAPH+LANG<-!><**>INPUT "Option",s
  5027.  
  5028. @Small_Header@<:#259,9360>See Also
  5029.  
  5030. <:#240,9360><-"><-"><-"><-">
  5031.  
  5032. <:p<* >>
  5033.  
  5034. @Subhead@<+@><:#360,9360>DISPSTR   <+">Statement<-">
  5035.  
  5036. @Small_Header@<:#259,9360>Function
  5037.  
  5038. <:#240,9360>Display a string of text.
  5039.  
  5040. @Small_Header@<:#259,9360>Syntax
  5041.  
  5042. <:#202,9360><:f,QCourier,>DISPSTR<:f><:f,QCourier,> str<:f>
  5043.  
  5044. @Indent_List@<:#240,9360>    <:f,QCourier,>str<:f>    A string expression to display (or %filename or !PPEfile to execute).
  5045.  
  5046. @Small_Header@<:#259,9360>Remarks
  5047.  
  5048. <:#1200,9360>This statement in intended to allow you to easily display a string to the user and provide some of the functionality of PCBTEXT.  If the string to display begins with a percent sign and is followed by a valid file name, then the file will be displayed to th
  5049. e caller instead of the string.  Alternately, the string could begin with an exclamation mark (and be followed by a legal filename) to run a PPE file.
  5050.  
  5051. @Small_Header@<:#259,9360>Examples
  5052.  
  5053. @Example_Text@<:#1106,9360>STRING s<**>INPUT "String",s<+!><**>DISPSTR s<-!><**>LET s = "Regular string"<+!><**>DISPSTR s<-!><+!><**>DISPSTR "%C:\PCB\GEN\BRDM"<-!><+!><**>DISPSTR "!"+PPEPATH()+"SUBSCR.PPE"<-!>
  5054.  
  5055. @Small_Header@<:#259,9360>See Also
  5056.  
  5057. <:#240,9360><-"><-"><-"><-">
  5058.  
  5059. <:p<* >>
  5060.  
  5061. @Subhead@<+@><:#360,9360>DISPTEXT   <+">Statement<-">
  5062.  
  5063. @Small_Header@<:#259,9360>Function
  5064.  
  5065. <:#240,9360>Display a specified prompt from the PCBTEXT file.
  5066.  
  5067. @Small_Header@<:#259,9360>Syntax
  5068.  
  5069. <:#202,9360><:f,QCourier,>DISPTEXT<:f><:f,QCourier,> rec,flags<:f>
  5070.  
  5071. @Indent_List@<:#240,9360>    <:f,QCourier,>rec<:f>    An integer expression with the PCBTEXT record number to display.
  5072.  
  5073. @Indent_List@<:#240,9360>    <:f,QCourier,>flags<:f>    An integer expression with display flags.
  5074.  
  5075. @Small_Header@<:#259,9360>Remarks
  5076.  
  5077. <:#730,9360>This statement will allow you to display any prompt from the PCBTEXT file to the user according to a set of display flags.  Valid display flags are 
  5078. <+!>BELL<-!>,<+!> DEFS<-!>,<+!> LFAFTER<-!>,<+!> LFBEFORE<-!>,<+!> LOGIT<-!>,<+!> LOGITLEFT<-!>, and<+!> NEWLINE<-!>.
  5079.  
  5080. @Small_Header@<:#259,9360>Examples
  5081.  
  5082. @Example_Text@<:#316,9360><+!>DISPTEXT 192,BELL+NEWLINE+LOGIT<-!><**>HANGUP
  5083.  
  5084. @Small_Header@<:#259,9360>See Also
  5085.  
  5086. <:#240,9360><-"><-"><-"><-">
  5087.  
  5088. <:p<* >>
  5089.  
  5090. @Subhead@<:#360,9360>DOINTR   <+">Statement<-">
  5091.  
  5092. @Small_Header@<:#259,9360>Function
  5093.  
  5094. <:#240,9360>Generate a system interrupt.
  5095.  
  5096. @Small_Header@<:#259,9360>Syntax
  5097.  
  5098. <:#202,9360><:f,QCourier,>DOINTR int,ax,bx,cx,dx,si,di,flags,ds,es<:f>
  5099.  
  5100. @Indent_List@<:#240,9360>    <:f,QCourier,>int<:f>    An integer expression with the interrupt number to call (0 through 255).
  5101.  
  5102. @Indent_List@<:#720,9360>    others    Integer expressions with 16-bit register values to pass to the interrupt (ax, bx, cx, dx, si, and di are general purpose registers; ds and es are segment registers; flags is the 80x86 processor status register).
  5103.  
  5104. @Small_Header@<:#259,9360>Remarks
  5105.  
  5106. <:#1930,9360>This statement allows practically unlimited flexibility in PPL.  It allows you to access any system service available via the BIOS (video, disk, time, etc), DOS or other third party interface (DESQview, NETBIOS, IPX/SPX, Btrieve, etc).  The possibilities ar
  5107. e limited only by your imagination.  Values that are returned via register may be accessed via the 
  5108. <+!>REG...()<-!> functions.  The values to pass to specific interrupts will vary by the interrupt and function desired.  
  5109. <+!>WARNING!!!<-!>  The <+!>DOINTR<-!> function can be a very valuable tool when used wisely; it can also be extremely destructive when used improperly (either accidentally or intentionally).  Use it at your own risk!
  5110.  
  5111. @Small_Header@<:#259,9360>Examples
  5112.  
  5113. @Example_Text@<:#2370,9360>' Create subdirectory - DOS function 39h<**>INTEGER addr<**>STRING  path<**>LET path = "C:\$TMPDIR$"<**>VARADDR path,addr<+!><**>DOINTR 21h,39h,0,0,addr%00010000h,0,0,0,addr/00010000h,0<-!><**>IF (REGCF() & (REGAX() = 3)) THEN<**>  PRINTLN "Error:  Path not
  5114.  found"<**>ELSE IF (REGCF() & (REGAX() = 5)) THEN<**>  PRINTLN "Error:  Access Denied"<**>ELSE IF (REGCF()) THEN<**>  PRINTLN "Error:  Unknown Error"<**>ELSE<**>  PRINTLN "Directory successfully created..."<**>ENDIF
  5115.  
  5116. @Small_Header@<:#259,9360>See Also
  5117.  
  5118. <:#480,9360><-"><-"><+!>B2W() <+">Function<-">, REG...() <+">Function<-">, VARADDR 
  5119. <+">Statement<-">, VAROFF <+">Statement<-">, VARSEG <+">Statement<-"><-!>
  5120.  
  5121. <:p<* >>
  5122.  
  5123. @Subhead@<:#360,9360>DOW()   <+">Function<-">
  5124.  
  5125. @Small_Header@<:#259,9360>Function
  5126.  
  5127. <:#240,9360>Determine the day of the week of a particular date.
  5128.  
  5129. @Small_Header@<:#259,9360>Syntax
  5130.  
  5131. <:#202,9360><:f,QCourier,>DOW(dexp)<:f>
  5132.  
  5133. @Indent_List@<:#240,9360>    <:f,QCourier,>dexp<:f>    Any date expression.
  5134.  
  5135. @Small_Header@<+@><:#259,9360>Return Type & Value
  5136.  
  5137. @Indent_List@<:#485,9360><+!>INTEGER<-!>    Returns the day of the week from the specified date expression (dexp).  Valid return values are from 0 (Sunday) to 6 (Saturday).
  5138.  
  5139. @Small_Header@<:#259,9360>Remarks
  5140.  
  5141. <:#730,9360>This function allows you to extract a particular piece of information about a 
  5142. <+!>DATE<-!> value, in this case the day of the week of the date.  The specified date can be any valid 
  5143. <+!>DATE<-!> expression.
  5144.  
  5145. @Small_Header@<:#259,9360>Examples
  5146.  
  5147. @Example_Text@<:#168,9360>PRINTLN "Today is:  ",<+!>DOW(DATE())<-!>
  5148.  
  5149. @Small_Header@<:#259,9360>See Also
  5150.  
  5151. <:#240,9360><+!>DAY() <+">Function<-">, MONTH() <+">Function<-">, YEAR<+!>() <+">Function<-"><-"><-"><-">
  5152.  
  5153. <:p<* >>
  5154.  
  5155. @Subhead@<+@><:#360,9360>DTROFF   <+">Statement<-">
  5156.  
  5157. @Small_Header@<:#259,9360>Function
  5158.  
  5159. <:#240,9360>Turn off the serial port DTR signal.
  5160.  
  5161. @Small_Header@<:#259,9360>Syntax
  5162.  
  5163. <:#202,9360><:f,QCourier,>DTROFF<:f>
  5164.  
  5165. @Indent_List@<:#240,9360>    No arguments are required
  5166.  
  5167. @Small_Header@<:#259,9360>Remarks
  5168.  
  5169. <:#1925,9360>This statement turns off the serial port DTR signal.  Most modems take this condition to mean that they should hang up on a caller, and this is how PCBoard uses it.  This statement can be used when you need to hangup on a caller but don't want PCBoard to pe
  5170. rform it's logoff processing.  Simply turn off CD checking and keyboard timeout checking and issue the 
  5171. <+!>DTROFF<-!> statement.  Do whatever processing you want, then turn DTR, keyboard timeout testing, and CD loss testing back on to allow PCBoard to recycle normally.  Note that DTR should remain off for a period of time to ensure that the modem has time to
  5172.  react to it.  Consider 1/2 second (about 9 clock ticks) a reasonable delay.
  5173.  
  5174. @Small_Header@<:#259,9360>Examples
  5175.  
  5176. @Example_Text@<:#1738,9360>BOOLEAN flag<**>KBDCHKOFF<**>CDCHKOFF<+!><**>DTROFF<-!><**>DELAY 18<**>DTRON<**>SENDMODEM "ATDT5551212" ' Please don't really dial this number!<**>WAITFOR "CONNECT",flag,60<**>IF (!flag) SPRINLN "No connect found in 60 seconds"<**>CDCHKON<**>KBDCHKON
  5177.  
  5178. @Small_Header@<:#259,9360>See Also
  5179.  
  5180. <:#240,9360><+!>DTRON <+">Statement<-"><-!>
  5181.  
  5182. <:p<* >>
  5183.  
  5184. @Subhead@<+@><:#360,9360>DTRON   <+">Statement<-">
  5185.  
  5186. @Small_Header@<:#259,9360>Function
  5187.  
  5188. <:#240,9360>Turn on the serial port DTR signal.
  5189.  
  5190. @Small_Header@<:#259,9360>Syntax
  5191.  
  5192. <:#202,9360><:f,QCourier,>DTRON<:f>
  5193.  
  5194. @Indent_List@<:#240,9360>    No arguments are required
  5195.  
  5196. @Small_Header@<:#259,9360>Remarks
  5197.  
  5198. <:#1205,9360>This statement turns on the serial port DTR signal.  This statement should be used after you've used the 
  5199. <+!>DTROFF<-!> statement to hangup the modem when you need to hangup on a caller but don't want PCBoard to perform it's logoff processing.  Note that DTR should remain off for a period of time, to ensure that the modem has time to react to it, before turnin
  5200. g it back on.  Consider 1/2 second (about 9 clock ticks) a reasonable delay.
  5201.  
  5202. @Small_Header@<:#259,9360>Examples
  5203.  
  5204. @Example_Text@<:#1738,9360>BOOLEAN flag<**>KBDCHKOFF<**>CDCHKOFF<**>DTROFF<**>DELAY 18<+!><**>DTRON<-!><**>SENDMODEM "ATDT5551212" ' Please don't really dial this number!<**>WAITFOR "CONNECT",flag,60<**>IF (!flag) SPRINLN "No connect found in 60 seconds"<**>CDCHKON<**>KBDCHKON
  5205.  
  5206. @Small_Header@<:#259,9360>See Also
  5207.  
  5208. <:#240,9360><+!>DTROFF <+">Statement<-"><-!>
  5209.  
  5210. <:p<* >>
  5211.  
  5212. @Subhead@<:#360,9360>ECHODOTS   <+">Constant<-">
  5213.  
  5214. @Small_Header@<:#259,9360>Function
  5215.  
  5216. <:#245,9360>Set the echo dots flag in an <+!>INPUTSTR<-!> or <+!>PROMPTSTR<-!> statement.
  5217.  
  5218. @Small_Header@<:#259,9360>Value
  5219.  
  5220. <:#240,9360>1 = 1b = 1o = 1h
  5221.  
  5222. @Small_Header@<:#259,9360>Remarks
  5223.  
  5224. <:#965,9360>The <+!>INPUTSTR<-!> and <+!>PROMPTSTR<-!> statements have the ability to disable echoing of user input and instead echo dots in place of the user's input.  This is useful in situations where the information being entered is confidential and shouldn't be re
  5225. vealed to any other party.  A good example of this is the user's password.
  5226.  
  5227. @Small_Header@<:#259,9360>Examples
  5228.  
  5229. @Example_Text@<:#642,9360>STRING pwd<**>PROMPTSTR 148,pwd,12,MASK_PWD(),<+!>ECHODOTS<-!>+UPCASE<**>GETUSER<**>IF (pwd <<<;> U_PWD) HANGUP
  5230.  
  5231. @Small_Header@<:#259,9360>See Also
  5232.  
  5233. <:#240,9360><-"><-"><-"><-"><+!>INPUTSTR <+">Statement<-">, <-!><-"><-"><+!>PROMPTSTR 
  5234. <+">Statement<-"><-!><-"><-"><-"><-"><-">
  5235.  
  5236. <+!><+"><:p<* >>
  5237.  
  5238. @Subhead@<+@><:#360,9360>END   <+">Statement<-">
  5239.  
  5240. @Small_Header@<:#259,9360>Function
  5241.  
  5242. <:#240,9360>Terminate PPE execution.
  5243.  
  5244. @Small_Header@<:#259,9360>Syntax
  5245.  
  5246. <:#202,9360><:f,QCourier,>END<:f>
  5247.  
  5248. @Indent_List@<:#240,9360>    No arguments are required
  5249.  
  5250. @Small_Header@<:#259,9360>Remarks
  5251.  
  5252. <:#960,9360>This statement may be used to normally terminate PPE execution at any point.  If you do not have one in your program one is automatically inserted at the end of your source for you at compile time.  Additionally, if your PPL application is being used as a s
  5253. cript questionnaire, this statement will save any responses written to channel 0 to the script answer file.
  5254.  
  5255. @Small_Header@<:#259,9360>Examples
  5256.  
  5257. @Example_Text@<:#1906,9360>DATE    d<**>INTEGER i<**>STRING  s<**>LET s = "01-20-93"<**>LET d = s<**>IF (DATE() << d) THEN<**>  PRINTLN "Your calendar is off!"<**>  
  5258. <+!>END<-!><**>ENDIF<**>LET i = d<**>PRINTLN "The seige continues:  Day ",DATE()-i+1<+!><**>END<-!>
  5259.  
  5260. @Small_Header@<:#259,9360>See Also
  5261.  
  5262. <:#240,9360><+!>RETURN <+">Statement<-">, STOP <+">Statement<-"><-!>
  5263.  
  5264. <:p<* >>
  5265.  
  5266. @Subhead@<:#360,9360>ERASELINE   <+">Constant<-">
  5267.  
  5268. @Small_Header@<:#259,9360>Function
  5269.  
  5270. <:#245,9360>Set the erase line flag in an <+!>INPUTSTR<-!> or <+!>PROMPTSTR<-!> statement.
  5271.  
  5272. @Small_Header@<:#259,9360>Value
  5273.  
  5274. <:#240,9360>32 = 100000b = 40o = 20h
  5275.  
  5276. @Small_Header@<:#259,9360>Remarks
  5277.  
  5278. <:#730,9360>The <+!>INPUTSTR<-!> and <+!>PROMPTSTR<-!> statements have the ability to erase the current line after the user presses ENTER.  This is the technique used by the 
  5279. <+!>MORE<-!> and <+!>WAIT<-!> statements to clean up after themselves.
  5280.  
  5281. @Small_Header@<:#259,9360>Examples
  5282.  
  5283. @Example_Text@<:#326,9360>STRING s<**>INPUTSTR "Press ENTER to continue",s,@X0E,0,"",<+!>ERASELINE<-!>
  5284.  
  5285. @Small_Header@<:#259,9360>See Also
  5286.  
  5287. <:#240,9360><-"><-"><-"><-"><+!>INPUTSTR <+">Statement<-">, <-!><-"><-"><+!>PROMPTSTR 
  5288. <+">Statement<-"><-!><-"><-"><-"><-"><-">
  5289.  
  5290. <+!><+"><:p<* >>
  5291.  
  5292. @Subhead@<:#360,9360>EXIST()   <+">Function<-">
  5293.  
  5294. @Small_Header@<:#259,9360>Function
  5295.  
  5296. <:#240,9360>Determine whether or not a file exists.
  5297.  
  5298. @Small_Header@<:#259,9360>Syntax
  5299.  
  5300. <:#202,9360><:f,QCourier,>EXIST(file)<:f>
  5301.  
  5302. @Indent_List@<:#240,9360>    <:f,QCourier,>file<:f>    A string expression with the drive, path and file name to check.
  5303.  
  5304. @Small_Header@<+@><:#259,9360>Return Type & Value
  5305.  
  5306. @Indent_List@<:#485,9360><+!>BOOLEAN<-!>    Returns <+!>TRUE<-!> if the file exists on the specified drive and path, 
  5307. <+!>FALSE<-!> otherwise.
  5308.  
  5309. @Small_Header@<:#259,9360>Remarks
  5310.  
  5311. <:#960,9360>It is often necessary to check for the existence of a file.  For example, you wouldn't want to display or otherwise process a file that doesn't exist.  This function will report whether or not a specified file exists on a particular drive and path.  The dri
  5312. ve will default to the current drive and the path will default to the current directory if not specified.
  5313.  
  5314. @Small_Header@<:#259,9360>Examples
  5315.  
  5316. @Example_Text@<:#484,9360>STRING file<**>LET file = "NEWS."+STRING(CURNODE())<**>IF (<+!>EXIST(file)<-!>) DISPFILE file,0
  5317.  
  5318. @Small_Header@<:#259,9360>See Also
  5319.  
  5320. <:#240,9360><+!>FILEINF() <+">Function<-"><-!><+!><-"><-"><-"><-">
  5321.  
  5322. <:p<* >>
  5323.  
  5324. @Subhead@<:#360,9360>FALSE   <+">Constant<-">
  5325.  
  5326. @Small_Header@<:#259,9360>Function
  5327.  
  5328. <:#240,9360>To provide a named constant for the boolean false value in boolean expressions.
  5329.  
  5330. @Small_Header@<:#259,9360>Value
  5331.  
  5332. <:#240,9360>0 = 0b = 0o = 0h
  5333.  
  5334. @Small_Header@<:#259,9360>Remarks
  5335.  
  5336. <:#970,9360><+!>BOOLEAN<-!> logic is based on two values:  <+!>TRUE<-!> (1) and 
  5337. <+!>FALSE<-!> (0).  The literal numeric constants 0 and 1 may be used in expressions, or you may use the predefined named constants 
  5338. <+!>TRUE<-!> and <+!>FALSE<-!>.  They make for more readable, maintainable code and have no more overhead than any other constant value at run time.
  5339.  
  5340. @Small_Header@<:#259,9360>Examples
  5341.  
  5342. @Example_Text@<:#1126,9360>BOOLEAN flag<**>LET flag = TRUE<**>WHILE (!flag) DO<**>  INPUTSTR "Text",s,@X0E,60,"ABCDEFGHIJKLMNOPQRSTUVWXYZ ",<+!>UPCASE<-!><**>  PRINTLN s<**>  IF (s = "QUIT") LET flag = 
  5343. <+!>FALSE<-!><**>ENDWHILE
  5344.  
  5345. @Small_Header@<:#259,9360>See Also
  5346.  
  5347. <:#240,9360><-"><-"><-"><-"><+!>TRUE <-!><+!><+">Constant<-"><-!><-"><-"><-">
  5348.  
  5349. <:p<* >>
  5350.  
  5351. @Subhead@<:#360,9360>FAPPEND   <+">Statement<-">
  5352.  
  5353. @Small_Header@<:#259,9360>Function
  5354.  
  5355. <:#240,9360>Open a file for append access.
  5356.  
  5357. @Small_Header@<:#259,9360>Syntax
  5358.  
  5359. <:#202,9360><:f,QCourier,>FAPPEND chan,file,am,sm<:f>
  5360.  
  5361. @Indent_List@<:#240,9360>    <:f,QCourier,>chan<:f>    An integer expression with the channel to use for the file (0 through 7).
  5362.  
  5363. @Indent_List@<:#240,9360>    <:f,QCourier,>file<:f>    A string expression with the file specification to open.
  5364.  
  5365. @Indent_List@<:#240,9360>    <:f,QCourier,>am<:f>    An integer expression with the desired access mode for the file.
  5366.  
  5367. @Indent_List@<:#240,9360>    <:f,QCourier,>sm<:f>    An integer expression with the desired share mode flags for the file.
  5368.  
  5369. @Small_Header@<:#259,9360>Remarks
  5370.  
  5371. <:#3870,9360>This statement allows a PPL application to open a file for append access.  Often you need to add information to an existing file without destroying the existing information in the file.  
  5372. <+!>FCREATE<-!> completely destroys the file being opened if it already exists, and 
  5373. <+!>FOPEN<-!> will simply position you at the beginning of the file where you would overwrite data.  This statement will allow you to add the necessary information to the end of a file without destroying the file or any existing information in the file.  Th
  5374. e chan parameter must be 0 through 7; 0 is reserved for the answer file when a PPL script questionnaire is in use but is available for all other applications.  However, it is recommended you avoid channel 0 unless you really need to open 8 files at once.  T
  5375. he am parameter should be one of the following constant values:  <+!>O_RD<-!> (for read access), 
  5376. <+!>O_WR<-!> (for write access), or <+!>O_RW<-!> (for read/write access).  Note that the 
  5377. <+!>FAPPEND<-!> statement actually requires <+!>O_RW<-!> access; whatever you specify doesn't really matter as it will be overridden by PPL, but you must specify it to maintain compatibility with the 
  5378. <+!>FCREATE<-!> and <+!>FOPEN<-!> statements.  Finally, the sm parameter should be one of the following constants:  
  5379. <+!>S_DN<-!> (for deny none sharing), <+!>S_DR<-!> (for deny read sharing), 
  5380. <+!>S_DW<-!> (for deny write sharing), or <+!>S_DB<-!> (for deny both sharing).  Also, if the file specified doesn't exist, it will automatically be created.
  5381.  
  5382. @Small_Header@<:#259,9360>Examples
  5383.  
  5384. @Example_Text@<:#474,9360><+!>FAPPEND 1,"C:\PCB\MAIN\PPE.LOG",O_RW,S_DB<-!><**>FPUTLN 1,"Ran "+PPENAME()+" on "+STRING(DATE())+" at "+STRING(TIME())<**>FCLOSE 1
  5385.  
  5386. @Small_Header@<:#259,9360>See Also
  5387.  
  5388. <:#240,9360><-"><-"><-"><+!>FCLOSE <+">Statement<-">, FCREATE <+">Statement<-">, FOPEN 
  5389. <+">Statement<-"><-!><+!><-">, FREWIND <+">Statement<-!><-">
  5390.  
  5391. <:p<* >>
  5392.  
  5393. @Subhead@<:#360,9360>FCL   <+">Constant<-">
  5394.  
  5395. @Small_Header@<:#259,9360>Function
  5396.  
  5397. <:#240,9360>Forces PCBoard to count lines and provide prompts after every screen full of information.
  5398.  
  5399. @Small_Header@<:#259,9360>Value
  5400.  
  5401. <:#240,9360>2 = 10b = 2o = 2h
  5402.  
  5403. @Small_Header@<:#259,9360>Remarks
  5404.  
  5405. <:#980,9360>The <+!>STARTDISP<-!> statement takes a single argument to start displaying information in a certain format.  
  5406. <+!>FCL<-!> tells PCBoard to count lines and pause as needed during the display of information.  
  5407. <+!>FNS<-!> tells PCBoard to not stop during the display of information.  
  5408. <+!>NC<-!> instructs PCBoard to start over with the last specified mode (<+!>FCL<-!> or 
  5409. <+!>FNS<-!>).
  5410.  
  5411. @Small_Header@<:#259,9360>Examples
  5412.  
  5413. @Example_Text@<:#800,9360>INTEGER i<**>STARTDISP <+!>FCL<-!><**>FOR i = 1 to 100<**>  PRINTLN "This is line ",i<**>NEXT
  5414.  
  5415. @Small_Header@<:#259,9360>See Also
  5416.  
  5417. <:#240,9360><-"><-"><-"><-"><+!>FNS <-!><+!><+">Constant<-!><-"><+!>, <-!><+!><-"><-"><-"><-">NC 
  5418. <+">Constant<-"><-"><-"><-">
  5419.  
  5420. <:p<* >>
  5421.  
  5422. @Subhead@<:#360,9360>FCLOSE   <+">Statement<-">
  5423.  
  5424. @Small_Header@<:#259,9360>Function
  5425.  
  5426. <:#240,9360>Close an open file.
  5427.  
  5428. @Small_Header@<:#259,9360>Syntax
  5429.  
  5430. <:#202,9360><:f,QCourier,>FCLOSE chan<:f>
  5431.  
  5432. @Indent_List@<:#240,9360>    <:f,QCourier,>chan<:f>    An integer expression with the open channel to close (0 through 7).
  5433.  
  5434. @Small_Header@<:#259,9360>Remarks
  5435.  
  5436. <:#1205,9360>This statement should be used to close a file channel after it has been created/opened with an 
  5437. <+!>FCREATE<-!>, <+!>FOPEN<-!>, or <+!>FAPPEND<-!> statement.  If you should forget to close your files by the end of your PPL application, PPL will automatically close them for you.  However, if you need to process many files, it will usually be required t
  5438. hat you open a few at a time and close them before going on to the next set of files.
  5439.  
  5440. @Small_Header@<:#259,9360>Examples
  5441.  
  5442. @Example_Text@<:#1106,9360>FOPEN 1,"C:\PCB\MAIN\PPE.LOG",O_RD,S_DW<**>FGET 1,hdr<+!><**>FCLOSE 1<-!><**>IF (hdr <<<;> "Creating PPE.LOG file . . .") THEN<**>  PRINTLN "Error: PPE.LOG invalid"<**>  END<**>ENDIF
  5443.  
  5444. @Small_Header@<:#259,9360>See Also
  5445.  
  5446. <:#240,9360><-"><-"><-"><+!>FAPPEND <+">Statement<-!><-"><+!><-">, <-!><+!>FCREATE 
  5447. <+">Statement<-!><-"><+!><-">, FOPEN <+">Statement<-!><-"><-"><-"><+!><-">, FREWIND 
  5448. <+">Statement<-!><-">
  5449.  
  5450. <:p<* >>
  5451.  
  5452. @Subhead@<:#360,9360>FCREATE   <+">Statement<-">
  5453.  
  5454. @Small_Header@<:#259,9360>Function
  5455.  
  5456. <:#240,9360>Create and open a file.
  5457.  
  5458. @Small_Header@<:#259,9360>Syntax
  5459.  
  5460. <:#202,9360><:f,QCourier,>FCREATE chan,file,am,sm<:f>
  5461.  
  5462. @Indent_List@<:#240,9360>    <:f,QCourier,>chan<:f>    An integer expression with the channel to use for the file (0 through 7).
  5463.  
  5464. @Indent_List@<:#240,9360>    <:f,QCourier,>file<:f>    A string expression with the file specification to create and open.
  5465.  
  5466. @Indent_List@<:#240,9360>    <:f,QCourier,>am<:f>    An integer expression with the desired access mode for the file.
  5467.  
  5468. @Indent_List@<:#240,9360>    <:f,QCourier,>sm<:f>    An integer expression with the desired share mode flags for the file.
  5469.  
  5470. @Small_Header@<:#259,9360>Remarks
  5471.  
  5472. <:#2905,9360>This statement allows a PPL application to force the creation and opening of a file, even if it already exists.  Creation means that any information previously in the file (if it already exists) will be lost and you will be starting over with an empty file.
  5473.   The chan parameter must be 0 through 7; 0 is reserved for the answer file when a PPL script questionnaire is in use but is available for all other applications.  However, it is recommended you avoid channel 0 unless you really need to open 8 files at once
  5474. .  The am parameter should be one of the following constant values:  
  5475. <+!>O_RD<-!> (for read access), <+!>O_WR<-!> (for write access), or 
  5476. <+!>O_RW<-!> (for read/write access).  Note that the <+!>FCREATE<-!> statement forces the creation of an empt file so it doesn't make much sense to use 
  5477. <+!>O_RD<-!>, as there is nothing to read, unless you only want to create the file.  Finally, the sm parameter should be one of the following constants:  
  5478. <+!>S_DN<-!> (for deny none sharing), <+!>S_DR<-!> (for deny read sharing), 
  5479. <+!>S_DW<-!> (for deny write sharing), or <+!>S_DB<-!> (for deny both sharing).
  5480.  
  5481. @Small_Header@<:#259,9360>Examples
  5482.  
  5483. @Example_Text@<:#474,9360><+!>FCREATE 1,"C:\PCB\MAIN\PPE.LOG",O_WR,S_DN<-!><**>FPUTLN 1,"Creating PPE.LOG file . . ."<**>FCLOSE 1
  5484.  
  5485. @Small_Header@<:#259,9360>See Also
  5486.  
  5487. <:#240,9360><-"><-"><-"><+!>FAPPEND <+">Statement<-">, FCLOSE <+">Statement<-">, 
  5488. <-!><+!>FOPEN <+">Statement<-"><-!><-"><+!><-">, FREWIND <+">Statement<-!><-">
  5489.  
  5490. <:p<* >>
  5491.  
  5492. @Subhead@<:#360,9360>FERR()   <+">Function<-">
  5493.  
  5494. @Small_Header@<:#259,9360>Function
  5495.  
  5496. <:#240,9360>Determine whether or not an error has occurred on a channel since last checked.
  5497.  
  5498. @Small_Header@<:#259,9360>Syntax
  5499.  
  5500. <:#202,9360><:f,QCourier,>FERR(chan)<:f>
  5501.  
  5502. @Indent_List@<:#240,9360>    <:f,QCourier,>chan<:f>    An integer expression with the channel to use for the file (0 through 7).
  5503.  
  5504. @Small_Header@<+@><:#259,9360>Return Type & Value
  5505.  
  5506. @Indent_List@<:#490,9360><+!>BOOLEAN<-!>    Returns <+!>TRUE<-!> if an error has occurred on the specified channel since last checked, 
  5507. <+!>FALSE<-!> otherwise.
  5508.  
  5509. @Small_Header@<:#259,9360>Remarks
  5510.  
  5511. <:#1440,9360>There are many reasons why errors can occur during file processing.  The drive, path or file may not exist, the end of the file may have been reached, the drive may be full, there could be errors with the hardware, and so on.  For maximum reliability, you s
  5512. hould use the function to check for errors after every file channel statement.  PCBoard will automatically handle alerting the user of the error in most cases.  All you need is to know that an error occurred so that you may continue processing else where or
  5513.  clean up and exit.
  5514.  
  5515. @Small_Header@<:#259,9360>Examples
  5516.  
  5517. @Example_Text@<:#2232,9360>INTEGER i<**>STRING  s<**>FOPEN 1,"FILE.DAT",O_RD,S_DW<**>IF (<+!>FERR(1)<-!>) THEN<**>  PRINTLN "Error, exiting..."<**>  END<**>ENDIF<**>FGET 1,s<**>WHILE (!<+!>FERR(1)<-!>) DO<**>  INC i<**>  PRINTLN "Line ",RIGHT(i,3),":  ",s<**>  FGET 1,s<**>ENDWHILE<**>
  5518. FCLOSE 1
  5519.  
  5520. @Small_Header@<:#259,9360>See Also
  5521.  
  5522. <:#240,9360><-"><+!><-"><-"><-"><-">
  5523.  
  5524. <:p<* >>
  5525.  
  5526. @Subhead@<:#360,9360>FGET   <+">Statement<-">
  5527.  
  5528. @Small_Header@<:#259,9360>Function
  5529.  
  5530. <:#240,9360>Get (read) a line from an open file<*7><*7>.
  5531.  
  5532. @Small_Header@<:#259,9360>Syntax
  5533.  
  5534. <:#202,9360><:f,QCourier,>FGET chan,var<:f>
  5535.  
  5536. @Indent_List@<:#240,9360>    <:f,QCourier,>chan<:f>    An integer expression with the channel to read from (0 through 7).
  5537.  
  5538. @Indent_List@<:#240,9360>    <:f,QCourier,>var<:f>    The variable into which to read the next line from chan.
  5539.  
  5540. @Small_Header@<:#259,9360>Remarks
  5541.  
  5542. <:#720,9360>This statement is to be used for reading information, a line at a time, from a file that was previously opened with read access.  If there are multiple items of information on the line then you must parse them out manually.
  5543.  
  5544. @Small_Header@<:#259,9360>Examples
  5545.  
  5546. @Example_Text@<:#2222,9360>INTEGER i<**>STRING  s<**>FOPEN 1,"FILE.DAT",O_RD,S_DW<**>IF (FERR(1)) THEN<**>  PRINTLN "Error, exiting..."<**>  END<**>ENDIF<+!><**>FGET 1,s<-!><**>WHILE (!FERR(1)) DO<**>  INC i<**>  PRINTLN "Line ",RIGHT(i,3),":  ",s<**>  
  5547. <+!>FGET 1,s<-!><**>ENDWHILE<**>FCLOSE 1
  5548.  
  5549. @Small_Header@<:#259,9360>See Also
  5550.  
  5551. <:#240,9360><-"><-"><-"><-"><+!>FPUT/<-!><+!>FPUTLN <+">Statements<-">, FPUTPAD 
  5552. <+">Statement<-"><-!>
  5553.  
  5554. <:p<* >>
  5555.  
  5556. @Subhead@<:#360,9360>FIELDLEN   <+">Constant<-">
  5557.  
  5558. @Small_Header@<:#259,9360>Function
  5559.  
  5560. <:#245,9360>Set the display field length flag in an <+!>INPUTSTR<-!> or <+!>PROMPTSTR<-!> statement.
  5561.  
  5562. @Small_Header@<:#259,9360>Value
  5563.  
  5564. <:#240,9360>2 = 10b = 2o = 2h
  5565.  
  5566. @Small_Header@<:#259,9360>Remarks
  5567.  
  5568. <:#970,9360>The <+!>INPUTSTR<-!> and <+!>PROMPTSTR<-!> statements have the ability to display the length of an input field using "( )" if the user has ANSI available.  If you want to ensure that the user knows how wide the input area is regardless of ANSI support being
  5569.  available, also use the <+!>GUIDE<-!> constant.
  5570.  
  5571. @Small_Header@<:#259,9360>Examples
  5572.  
  5573. @Example_Text@<:#484,9360>STRING pwd<**>INPUTSTR "Enter id number",pwd,@X0E,4,"0123456789",<+!>FIELDLEN<-!>+GUIDE<**>IF (pwd <<<;> "1234") PRINTLN "Bad id number"
  5574.  
  5575. @Small_Header@<:#259,9360>See Also
  5576.  
  5577. <:#240,9360><-"><-"><-"><-"><+!>GUIDE <+">Constant<-">, INPUTSTR <+">Statement<-">, 
  5578. <-!><-"><-"><+!>PROMPTSTR <+">Statement<-"><-!><-"><-"><-"><-"><-">
  5579.  
  5580. <:p<* >>
  5581.  
  5582. @Subhead@<:#360,9360>FILEINF()   <+">Function<-">
  5583.  
  5584. @Small_Header@<:#259,9360>Function
  5585.  
  5586. <:#240,9360>Access a piece of information about a file.
  5587.  
  5588. @Small_Header@<:#259,9360>Syntax
  5589.  
  5590. <:#202,9360><:f,QCourier,>FILEINF<:f><:f,QCourier,>(<:f><:f,QCourier,>file,item)<:f>
  5591.  
  5592. @Indent_List@<:#480,9360>    <:f,QCourier,>file<:f>    A string expression with the path and file name to access information about.
  5593.  
  5594. @Indent_List@<:#480,9360>    <:f,QCourier,>item<:f>    An integer expression with the desired piece of information (1 through 9) to retrieve about file.
  5595.  
  5596. @Small_Header@<:#259,9360>Return Type & Value
  5597.  
  5598. @Indent_List@<:#245,9360><+!>BOOLEAN<-!>    Returns <+!>TRUE<-!></`>if file exists or <+!>FALSE<-!> if file doesn't exist if item is 1.
  5599.  
  5600. @Indent_List@<:#245,9360><+!>DATE<-!>    Returns the date stamp of file if item is 2.
  5601.  
  5602. @Indent_List@<:#245,9360><+!>INTEGER<-!>    Returns one of the following for the specified values of stat:
  5603.  
  5604. @Indent_List@<:#240,9360>    4    The size of file in bytes;
  5605.  
  5606. @Indent_List@<:#240,9360>    5    The attribute bits of file.
  5607.  
  5608. @Indent_List@<:#245,9360><+!>STRING<-!>    Returns one of the following for the specified values of stat:
  5609.  
  5610. @Indent_List@<:#240,9360>    6    The drive of file;
  5611.  
  5612. @Indent_List@<:#240,9360>    7    The path of file;
  5613.  
  5614. @Indent_List@<:#240,9360>    8    The base name of file;
  5615.  
  5616. @Indent_List@<:#240,9360>    9    The extension of file.
  5617.  
  5618. @Indent_List@<:#245,9360><+!>TIME<-!>    Returns the time stamp of file if item is 3.
  5619.  
  5620. @Small_Header@<:#259,9360>Remarks
  5621.  
  5622. <:#970,9360>This function is designed to return information about a file.  The file date, time, size and attributes are accessible from DOS.  In addition, this function can parse out the drive, path, base name and extension if needed from the complete file specificatio
  5623. n.  Finally, the <+!>EXIST()<-!> function is duplicated in <+!>FILEINF()<-!>.
  5624.  
  5625. @Small_Header@<:#259,9360>Examples
  5626.  
  5627. @Example_Text@<:#1670,9360>STRING file<**>WHILE (<+!>FILEINF(file,1)<-!>) INPUT "File",file<**>PRINTLN " Date: ",<+!>FILEINF(file,2)<-!><**>PRINTLN " Time: ",<+!>FILEINF(file,3)<-!><**>PRINTLN " Size: ",<+!>FILEINF(file,4)<-!><**>PRINTLN " Attr: ",<+!>FILEINF(file,5)<-!><**>PRINTLN "
  5628. Drive: ",<+!>FILEINF(file,6)<-!><**>PRINTLN " Path: ",<+!>FILEINF(file,7)<-!><**>PRINTLN " Name: ",<+!>FILEINF(file,8)<-!><**>PRINTLN "  Ext: ",<+!>FILEINF(file,9)<-!>
  5629.  
  5630. @Small_Header@<:#259,9360>See Also
  5631.  
  5632. <:#240,9360><-"><-"><-"><-"><+!>EXIST() <+">Function<-"><-!>
  5633.  
  5634. <:p<* >>
  5635.  
  5636. @Subhead@<:#360,9360>FMTCC()   <+">Function<-">
  5637.  
  5638. @Small_Header@<:#259,9360>Function
  5639.  
  5640. <:#240,9360>Formats a credit card number for display purposes.
  5641.  
  5642. @Small_Header@<:#259,9360>Syntax
  5643.  
  5644. <:#202,9360><:f,QCourier,>FMTCC(sexp)<:f>
  5645.  
  5646. @Indent_List@<:#240,9360>    <:f,QCourier,>sexp<:f>    Any string expression.
  5647.  
  5648. @Small_Header@<+@><:#259,9360>Return Type & Value
  5649.  
  5650. @Indent_List@<:#245,9360><+!>STRING<-!>    Returns sexp formatted in a credit card style for display purposes.
  5651.  
  5652. @Small_Header@<:#259,9360>Remarks
  5653.  
  5654. <:#960,9360>This function will do one of the following:  one, take a 13 character string and format it as 
  5655. <:f,QCourier,>"XXXX XXX XXX XXX"<:f>; two, take a 15 character string and format it as 
  5656. <:f,QCourier,>"XXXX XXXXXX XXXXX"<:f>; three, take a 16 character string and format it as 
  5657. <:f,QCourier,>"XXXX XXXX XXXX XXXX"<:f>; or four, return the string unmodified if it is not 13, 15 or 16 characters long.
  5658.  
  5659. @Small_Header@<:#259,9360>Examples
  5660.  
  5661. @Example_Text@<:#958,9360>STRING s<**>WHILE (!VALCC(s)) DO<**>  INPUT "CC #",s<**>  NEWLINES 2<**>ENDWHILE<**>PRINTLN CCTYPE(s)," - ",<+!>FMTCC(s)<-!>
  5662.  
  5663. @Small_Header@<:#259,9360>See Also
  5664.  
  5665. <:#240,9360><-"><-"><-"><-"><+!>CCTYPE() <+">Function<-">, VALCC() <+">Function<-">, VALDATE() 
  5666. <+">Function<-">, VALTIME() <+">Function<-"><-!>
  5667.  
  5668. <:p<* >>
  5669.  
  5670. @Subhead@<:#360,9360>FNS   <+">Constant<-">
  5671.  
  5672. @Small_Header@<:#259,9360>Function
  5673.  
  5674. <:#240,9360>Forces PCBoard to not stop to provide prompts while displaying information.
  5675.  
  5676. @Small_Header@<:#259,9360>Value
  5677.  
  5678. <:#240,9360>1 = 1b = 1o = 1h
  5679.  
  5680. @Small_Header@<:#259,9360>Remarks
  5681.  
  5682. <:#980,9360>The <+!>STARTDISP<-!> statement takes a single argument to start displaying information in a certain format.  
  5683. <+!>FCL<-!> tells PCBoard to count lines and pause as needed during the display of information.  
  5684. <+!>FNS<-!> tells PCBoard to not stop during the display of information.  
  5685. <+!>NC<-!> instructs PCBoard to start over with the last specified mode (<+!>FCL<-!> or 
  5686. <+!>FNS<-!>).
  5687.  
  5688. @Small_Header@<:#259,9360>Examples
  5689.  
  5690. @Example_Text@<:#800,9360>INTEGER i<**>STARTDISP <+!>FNS<-!><**>FOR i = 1 to 100<**>  PRINTLN "This is line ",i<**>NEXT
  5691.  
  5692. @Small_Header@<:#259,9360>See Also
  5693.  
  5694. <:#240,9360><-"><-"><-"><-"><+!>FCL <-!><+!><+">Constant<-!><-"><+!>, <-!><+!><-"><-"><-"><-">NC 
  5695. <+">Constant<-"><-"><-"><-">
  5696.  
  5697. <:p<* >>
  5698.  
  5699. @Subhead@<:#360,9360>FOPEN   <+">Statement<-">
  5700.  
  5701. @Small_Header@<:#259,9360>Function
  5702.  
  5703. <:#240,9360>Open a file.
  5704.  
  5705. @Small_Header@<:#259,9360>Syntax
  5706.  
  5707. <:#202,9360><:f,QCourier,>FOPEN chan,file,am,sm<:f>
  5708.  
  5709. @Indent_List@<:#240,9360>    <:f,QCourier,>chan<:f>    An integer expression with the channel to use for the file (0 through 7).
  5710.  
  5711. @Indent_List@<:#240,9360>    <:f,QCourier,>file<:f>    A string expression with the file specification to open.
  5712.  
  5713. @Indent_List@<:#240,9360>    <:f,QCourier,>am<:f>    An integer expression with the desired access mode for the file.
  5714.  
  5715. @Indent_List@<:#240,9360>    <:f,QCourier,>sm<:f>    An integer expression with the desired share mode flags for the file.
  5716.  
  5717. @Small_Header@<:#259,9360>Remarks
  5718.  
  5719. <:#2425,9360>This statement allows a PPL application to open a file for read and/or write access and to specify the method of sharing desired.  The chan parameter must be 0 through 7; 0 is reserved for the answer file when a PPL script questionnaire is in use but is ava
  5720. ilable for all other applications.  However, it is recommended you avoid channel 0 unless you really need to open 8 files at once.  The am parameter should be one of the following constant values:  
  5721. <+!>O_RD<-!> (for read access), <+!>O_WR<-!> (for write access), or 
  5722. <+!>O_RW<-!> (for read/write access).  Note that the <+!>O_RD <-!>constant expects the file to already exist; the other open constants will create the file if it already doesn't exist.  Finally, the sm parameter should be one of the following constants:  
  5723. <+!>S_DN<-!> (for deny none sharing), <+!>S_DR<-!> (for deny read sharing), 
  5724. <+!>S_DW<-!> (for deny write sharing), or <+!>S_DB<-!> (for deny both sharing).
  5725.  
  5726. @Small_Header@<:#259,9360>Examples
  5727.  
  5728. @Example_Text@<:#1264,9360>STRING hdr<**><+!>FOPEN 1,"C:\PCB\MAIN\PPE.LOG",O_RD,S_DW<-!><**>FGET 1,hdr<**>FCLOSE 1<**>IF (hdr <<<;> "Creating PPE.LOG file . . .") THEN<**>  PRINTLN "Error: PPE.LOG invalid"<**>  END<**>ENDIF
  5729.  
  5730. @Small_Header@<:#259,9360>See Also
  5731.  
  5732. <:#240,9360><-"><-"><-"><+!>FAPPEND <+">Statement<-">, FCLOSE <+">Statement<-">, 
  5733. <-!><+!>FCREATE <+">Statement<-"><-!><-"><+!><-">, FREWIND <+">Statement<-!><-">
  5734.  
  5735. <:p<* >>
  5736.  
  5737. @Subhead@<+@><:#360,9360>FOR/NEXT   <+">Statement<-">
  5738.  
  5739. @Small_Header@<:#259,9360>Function
  5740.  
  5741. <:#240,9360>Execute a block of statments for a range of values.
  5742.  
  5743. @Small_Header@<:#259,9360>Syntax
  5744.  
  5745. <:#606,9360><:f,QCourier,>FOR var = start TO end <[>STEP inc]<:f><:f,QCourier,><**>  statement(s)<**>NEXT<:f>
  5746.  
  5747. @Indent_List@<:#240,9360>    <:f,QCourier,>var<:f>    The index variable for the loop that will be set to each value.
  5748.  
  5749. @Indent_List@<:#240,9360>    <:f,QCourier,>start<:f>    Any valid PPL expression.
  5750.  
  5751. @Indent_List@<:#240,9360>    end    Any valid PPL expression.
  5752.  
  5753. @Indent_List@<:#240,9360>    inc    Any valid PPL expression.  1 if not specified.
  5754.  
  5755. @Small_Header@<:#259,9360>Remarks
  5756.  
  5757. <:#1450,9360>A <+!>FOR<-!> loop can consist of one or more statements.  At the beginning of the loop the specified variable (var) is initialized to the start value.  It is then checked against the end value.  If start is greater than end (for positive values of inc) or 
  5758. less than end (for negative values of inc) then the loop terminates.  Otherwise all the statements in the loop are executed in order.  At the 
  5759. <+!>NEXT<-!> statement the inc value (1 if not explicitly defined) is added to var and the loop value is retested as described above.
  5760.  
  5761. @Small_Header@<:#259,9360>Examples
  5762.  
  5763. @Example_Text@<:#1442,9360>BOOLEAN p(100)<**>INTEGER i<+!><**>FOR i = 1 TO 100<-!> ' Initialize all to TRUE<**>  LET p(i) = TRUE<+!><**>NEXT<-!><**>LET p(1) = FALSE<+!><**>FOR i = 4 TO 100 STEP 2<-!> ' Initialize every other one to FALSE<**>  LET p(i) = FALSE<+!><**>NEXT<-!>
  5764.  
  5765. @Small_Header@<:#259,9360>See Also
  5766.  
  5767. <:#240,9360><-"><-"><+!>IF/ELSEIF/ELSE/ENDIF <+">Statement<-">, WHILE/ENDWHILE<-!><+!> 
  5768. <+">Statement<-"><-!>
  5769.  
  5770. <:p<* >>
  5771.  
  5772. @Subhead@<:#360,9360>FORWARD   <+">Statement<-">
  5773.  
  5774. @Small_Header@<:#259,9360>Function
  5775.  
  5776. <:#240,9360>Move the cursor forward a specified number of columns.
  5777.  
  5778. @Small_Header@<:#259,9360>Syntax
  5779.  
  5780. <:#202,9360><:f,QCourier,>FORWARD numcols<:f>
  5781.  
  5782. @Indent_List@<:#480,9360>    <:f,QCourier,>numcols<:f>    An integer expression of the number of columns to move forward.  Valid values are 1 through 79.
  5783.  
  5784. @Small_Header@<:#259,9360>Remarks
  5785.  
  5786. <:#2165,9360>This statement will move the cursor forward, nondestructively, a specified number of columns.  It will work with or without ANSI.  If ANSI is available (as reported by the 
  5787. <+!>ANSION()<-!> function) then it will use an ANSI positioning command; otherwise it will re-display the specified number of characters that are already on screen.  ANSI is usually faster, but re-displaying the existing information will get the job done.  
  5788. Note that you cannot use this function to move beyond column 80; to do so would require ANSI to move back up if necessary.  So, if the cursor is already in column 80 this statement will have no effect.  And if the cursor is in column 1 the maximum you could
  5789.  move forward would be 79 (column 1 + 79 columns = column 80).
  5790.  
  5791. @Small_Header@<:#259,9360>Examples
  5792.  
  5793. @Example_Text@<:#1422,9360>PRINT "PIRNT is wrong"<**>DELAY 5*182/10<**>BACKUP 13<**>PRINT "RI"<+!><**>FORWARD 6<-!><**>PRINT "RIGHT"<**>DELAY 5*182/10<**>NEWLINE<**>WAIT
  5794.  
  5795. @Small_Header@<:#259,9360>See Also
  5796.  
  5797. <:#480,9360><+!>ANSION() <+">Function<-">, ANSIPOS <+">Statement<-">, BACKUP <+">Statement<-">, GETX() 
  5798. <+">Function<-">, GETY() <+">Function<-">, GRAFMODE() <+">Function
  5799.  
  5800. <:p<* >>
  5801.  
  5802. @Subhead@<:#360,9360>FPUT/FPUTLN   <+">Statements<-">
  5803.  
  5804. @Small_Header@<:#259,9360>Function
  5805.  
  5806. <:#240,9360>Put (write) a line to an open file (with an optional carriage return/line feed appended)<*7><*7>.
  5807.  
  5808. @Small_Header@<:#259,9360>Syntax
  5809.  
  5810. <:#606,9360><:f,QCourier,>FPUT chan,exp<[>,exp]<:f><:f,QCourier,><**>-or-<**>FPUT chan<[>,exp<[>,exp]]<:f>
  5811.  
  5812. @Indent_List@<:#240,9360>    <:f,QCourier,>chan<:f>    An integer expression with the channel to write to (0 through 7).
  5813.  
  5814. @Indent_List@<:#240,9360>    <:f,QCourier,>exp<:f>    An expression of any type to evaluate and write to chan.
  5815.  
  5816. @Small_Header@<:#259,9360>Remarks
  5817.  
  5818. <:#1215,9360>These statements will evalutate zero, one or more expressions of any type and write the results to the specified channel number.  The 
  5819. <+!>FPUTLN<-!> statement will append a carriage return/line feed sequence to the end of the expressions; 
  5820. <+!>FPUT<-!> will not.  Note that at least one expression must be specified for 
  5821. <+!>FPUT<-!>, unlike the <+!>FPUTLN<-!> statement which need not have any arguments passed to it other than the channel number.
  5822.  
  5823. @Small_Header@<:#259,9360>Examples
  5824.  
  5825. @Example_Text@<:#1106,9360><**>FAPPEND 1,"FILE.DAT",O_WR,S_DB<+!><**>FPUT 1,U_NAME()," ",DATE()<**>FPUTLN 1," ",TIME()," ",CURSEC()<**>FPUT 1,"Logged!"<**>FPUTLN 1<**>FPUTLN 1,"Have a nice"+" day!"<-!><**>FCLOSE 1
  5826.  
  5827. @Small_Header@<:#259,9360>See Also
  5828.  
  5829. <:#240,9360><-"><-"><-"><-"><+!>FGET <+">Statement<-">, <-!><+!>FPUTPAD <+">Statement<-"><-!>
  5830.  
  5831. <:p<* >>
  5832.  
  5833. @Subhead@<:#360,9360>FPUTPAD   <+">Statement<-">
  5834.  
  5835. @Small_Header@<:#259,9360>Function
  5836.  
  5837. <:#240,9360>Put (write) a line of a specified width to an open file<*7><*7>.
  5838.  
  5839. @Small_Header@<:#259,9360>Syntax
  5840.  
  5841. <:#202,9360><:f,QCourier,>FPUT chan,exp,width<:f>
  5842.  
  5843. @Indent_List@<:#240,9360>    <:f,QCourier,>chan<:f>    An integer expression with the channel to write to (0 through 7).
  5844.  
  5845. @Indent_List@<:#240,9360>    <:f,QCourier,>exp<:f>    An expression of any type to evaluate and write to chan.
  5846.  
  5847. @Indent_List@<:#480,9360>    <:f,QCourier,>width<:f>    An integer expression with the width to use to write exp.  Valid values are -256 through 256
  5848.  
  5849. @Small_Header@<:#259,9360>Remarks
  5850.  
  5851. <:#1200,9360>This statement will evalutate an expressions of any type and write the result to the specified channel number.  This statement will append a carriage return/line feed sequence to the end of the expression after padding it to the specified width with spaces.
  5852.   If width is positive, then exp will be written right justified (left padded) to the file.  If width is negative, then exp will be written left justified (right padded) to the file.
  5853.  
  5854. @Small_Header@<:#259,9360>Examples
  5855.  
  5856. @Example_Text@<:#790,9360><**>FAPPEND 1,"FILE.DAT",O_WR,S_DB<+!><**>FPUTPAD 1,U_NAME(),40<**>FPUTPAD 1,U_DATE(),20<**>FPUTPAD 1,U_TIME(),20<-!><**>FCLOSE 1
  5857.  
  5858. @Small_Header@<:#259,9360>See Also
  5859.  
  5860. <:#240,9360><-"><-"><-"><-"><+!>FGET <+">Statement<-">, FPUT/<-!><+!>FPUTLN <+">Statements<-"><-!>
  5861.  
  5862. <:p<* >>
  5863.  
  5864. @Subhead@<+@><:#360,9360>FRESHLINE   <+">Statement<-">
  5865.  
  5866. @Small_Header@<:#259,9360>Function
  5867.  
  5868. <:#240,9360>Move the cursor to a fresh line for output.
  5869.  
  5870. @Small_Header@<:#259,9360>Syntax
  5871.  
  5872. <:#202,9360><:f,QCourier,>FRESHLINE<:f>
  5873.  
  5874. @Indent_List@<:#240,9360>    No arguments are required
  5875.  
  5876. @Small_Header@<:#259,9360>Remarks
  5877.  
  5878. <:#965,9360>Often while displaying information to the screen you will print a certain amount then want to make sure you are on a clean line before continuing.  This statement checks to see if you are in column 1 of the current line.  If you are, it assumes you are on a
  5879.  clean line and does nothing.  Otherwise, it calls the <+!>NEWLINE<-!> statement for you automatically.
  5880.  
  5881. @Small_Header@<:#259,9360>Examples
  5882.  
  5883. @Example_Text@<:#1106,9360>INTEGER i, end<**>LET end = RANDOM(20)<**>FOR i = 1 TO end<**>  PRINT RIGHT(RANDOM(10000),8)<**>NEXT<+!><**>FRESHLINE<-!><**>PRINTLN "Now we continue . . ."
  5884.  
  5885. @Small_Header@<:#259,9360>See Also
  5886.  
  5887. <:#240,9360><-"><+!>NEWLINE <+">Statement<-">, NEWLINES <+">Statement<-"><-!>
  5888.  
  5889. <:p<* >>
  5890.  
  5891. @Subhead@<:#360,9360>FREWIND   <+">Statement<-">
  5892.  
  5893. @Small_Header@<:#259,9360>Function
  5894.  
  5895. <:#240,9360>Rewind an open file.
  5896.  
  5897. @Small_Header@<:#259,9360>Syntax
  5898.  
  5899. <:#202,9360><:f,QCourier,>FREWIND chan<:f>
  5900.  
  5901. @Indent_List@<:#240,9360>    <:f,QCourier,>chan<:f>    An integer expression with the open channel to rewind (0 through 7).
  5902.  
  5903. @Small_Header@<:#259,9360>Remarks
  5904.  
  5905. <:#1205,9360>This statement should be used when you need to rewind a file channel after it has been created/opened with an 
  5906. <+!>FCREATE<-!>, <+!>FOPEN<-!>, or <+!>FAPPEND<-!> statement.  Rewinding a file channel will flush file buffers, commit the file to disk, and reposition the file pointer to the beginning of the file.  Useful when you need to start over processing a file tha
  5907. t may have changed and don't want to close and re-open the file.
  5908.  
  5909. @Small_Header@<:#259,9360>Examples
  5910.  
  5911. @Example_Text@<:#1422,9360>STRING s<**>FAPPEND 1,"C:\PCB\MAIN\PPE.LOG",O_RW,S_DN<**>FPUTLN 1,U_NAME()<+!><**>FREWIND 1<-!><**>WHILE (!FERR(1)) DO<**>  FGET 1,s<**>  PRINTLN s<**>ENDWHILE<**>FCLOSE 1
  5912.  
  5913. @Small_Header@<:#259,9360>See Also
  5914.  
  5915. <:#240,9360><-"><-"><-"><+!>FAPPEND <+">Statement<-!><-"><+!><-">, <-!><+!>FCLOSE 
  5916. <+">Statement<-!><-"><+!><-">, <-!><+!>FCREATE <+">Statement<-!><-"><+!><-">, 
  5917. <-!><+!>FOPEN <+">Statement<-!><-"><-">
  5918.  
  5919. <:p<* >>
  5920.  
  5921. @Subhead@<:#360,9360>F_EXP   <+">Constant<-">
  5922.  
  5923. @Small_Header@<:#259,9360>Function
  5924.  
  5925. <:#245,9360>Set the conference expired access flag in a <+!>CONFFLA<-!><+!>G<-!> or 
  5926. <+!>CONFUNFLAG<-!> statement.
  5927.  
  5928. @Small_Header@<:#259,9360>Value
  5929.  
  5930. <:#240,9360>2 = 10b = 2o = 2h
  5931.  
  5932. @Small_Header@<:#259,9360>Remarks
  5933.  
  5934. <:#720,9360>There are five flags per conference maintained for each user.  This flag is used to indicate whether or not a user is registered in a specified conference after their subscription expiration date.
  5935.  
  5936. @Small_Header@<:#259,9360>Examples
  5937.  
  5938. @Example_Text@<:#336,9360>CONFUNFLAG 5,F_REG+<+!>F_EXP<-!>+F_SEL ' Clear reg, exp & sel flags from conf 5<**>CONFFLAG 9,F_REG+<+!>F_EXP<-!>+F_SEL   ' Set reg, exp & sel flags for conf 9
  5939.  
  5940. @Small_Header@<:#259,9360>See Also
  5941.  
  5942. <:#240,9360><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><+!>F_MW 
  5943. <+">Constant<-">, <-!><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><+!>F_REG<+">Constant<-">, 
  5944. <-!><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><+!>F_SEL 
  5945. <+">Constant<-">, <-!><+!>F_SYS <+">Constant<-"><-!>
  5946.  
  5947. <:p<* >>
  5948.  
  5949. @Subhead@<:#360,9360>F_MW   <+">Constant<-">
  5950.  
  5951. @Small_Header@<:#259,9360>Function
  5952.  
  5953. <:#245,9360>Set the conference mail waiting flag in a <+!>CONFFLA<-!><+!>G<-!> or 
  5954. <+!>CONFUNFLAG<-!> statement.
  5955.  
  5956. @Small_Header@<:#259,9360>Value
  5957.  
  5958. <:#240,9360>10 = 10000b = 20o = 10h
  5959.  
  5960. @Small_Header@<:#259,9360>Remarks
  5961.  
  5962. <:#480,9360>There are five flags per conference maintained for each user.  This flag is used to indicate whether or not a user has mail waiting in a specified conference.
  5963.  
  5964. @Small_Header@<:#259,9360>Examples
  5965.  
  5966. @Example_Text@<:#336,9360>CONFUNFLAG 5,<+!>F_MW<-!> ' Clear mail waiting flag from conf 5<**>CONFFLAG 9,<+!>F_MW<-!>   ' Set mail waiting flag for conf 9
  5967.  
  5968. @Small_Header@<:#259,9360>See Also
  5969.  
  5970. <:#240,9360><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><+!>F_EXP 
  5971. <+">Constant<-">, <-!><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><+!>F_REG<+">Constant<-">, 
  5972. <-!><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><+!>F_SEL 
  5973. <+">Constant<-">, <-!><+!>F_SYS <+">Constant<-"><-!>
  5974.  
  5975. <:p<* >>
  5976.  
  5977. @Subhead@<:#360,9360>F_REG   <+">Constant<-">
  5978.  
  5979. @Small_Header@<:#259,9360>Function
  5980.  
  5981. <:#245,9360>Set the conference registration flag in a <+!>CONFFLA<-!><+!>G<-!> or 
  5982. <+!>CONFUNFLAG<-!> statement.
  5983.  
  5984. @Small_Header@<:#259,9360>Value
  5985.  
  5986. <:#240,9360>1 = 1b = 1o = 1h
  5987.  
  5988. @Small_Header@<:#259,9360>Remarks
  5989.  
  5990. <:#480,9360>There are five flags per conference maintained for each user.  This flag is used to indicate whether or not a user is registered in a specified conference.
  5991.  
  5992. @Small_Header@<:#259,9360>Examples
  5993.  
  5994. @Example_Text@<:#336,9360>CONFUNFLAG 5,<+!>F_REG<-!>+F_EXP+F_SEL ' Clear reg, exp & sel flags from conf 5<**>CONFFLAG 9,<+!>F_REG<-!>+F_EXP+F_SEL   ' Set reg, exp & sel flags for conf 9
  5995.  
  5996. @Small_Header@<:#259,9360>See Also
  5997.  
  5998. <:#240,9360><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><+!>F_EXP 
  5999. <+">Constant<-">, <-!><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><+!>F_MW 
  6000. <+">Constant<-">, <-!><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><+!>F_SEL 
  6001. <+">Constant<-">, <-!><+!>F_SYS <+">Constant<-"><-!>
  6002.  
  6003. <:p<* >>
  6004.  
  6005. @Subhead@<:#360,9360>F_SEL   <+">Constant<-">
  6006.  
  6007. @Small_Header@<:#259,9360>Function
  6008.  
  6009. <:#245,9360>Set the conference selected flag in a <+!>CONFFLA<-!><+!>G<-!> or 
  6010. <+!>CONFUNFLAG<-!> statement.
  6011.  
  6012. @Small_Header@<:#259,9360>Value
  6013.  
  6014. <:#240,9360>4 = 100b = 4o = 4h
  6015.  
  6016. @Small_Header@<:#259,9360>Remarks
  6017.  
  6018. <:#480,9360>There are five flags per conference maintained for each user.  This flag is used to indicate whether or not a user has a specified conference selected for message scans.
  6019.  
  6020. @Small_Header@<:#259,9360>Examples
  6021.  
  6022. @Example_Text@<:#336,9360>CONFUNFLAG 5,F_REG+F_EXP+<+!>F_SEL<-!> ' Clear reg, exp & sel flags from conf 5<**>CONFFLAG 9,F_REG+F_EXP+<+!>F_SEL<-!>   ' Set reg, exp & sel flags for conf 9
  6023.  
  6024. @Small_Header@<:#259,9360>See Also
  6025.  
  6026. <:#240,9360><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><+!>F_EXP 
  6027. <+">Constant<-">, <-!><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><+!>F_MW 
  6028. <+">Constant<-">, <-!><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><+!>F_REG 
  6029. <+">Constant<-">, <-!><+!>F_SYS <+">Constant<-"><-!>
  6030.  
  6031. <:p<* >>
  6032.  
  6033. @Subhead@<:#360,9360>F_SYS   <+">Constant<-">
  6034.  
  6035. @Small_Header@<:#259,9360>Function
  6036.  
  6037. <:#245,9360>Set the conference SysOp access flag in a <+!>CONFFLA<-!><+!>G<-!> or 
  6038. <+!>CONFUNFLAG<-!> statement.
  6039.  
  6040. @Small_Header@<:#259,9360>Value
  6041.  
  6042. <:#240,9360>8 = 1000b = 10o = 8h
  6043.  
  6044. @Small_Header@<:#259,9360>Remarks
  6045.  
  6046. <:#480,9360>There are five flags per conference maintained for each user.  This flag is used to indicate whether or not a user has conference SysOp access in a specified conference.
  6047.  
  6048. @Small_Header@<:#259,9360>Examples
  6049.  
  6050. @Example_Text@<:#336,9360>CONFUNFLAG 5,<+!>F_SYS<-!> ' Remove (unflag) conf sysop access from conf 5<**>CONFFLAG 9,<+!>F_SYS<-!>   ' Grant (flag) conf sysop access for conf 9
  6051.  
  6052. @Small_Header@<:#259,9360>See Also
  6053.  
  6054. <:#240,9360><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><+!>F_EXP 
  6055. <+">Constant<-">, <-!><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><+!>F_MW 
  6056. <+">Constant<-">, <-!><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><+!>F_REG 
  6057. <+">Constant<-">, <-!><+!>F_SEL <+">Constant<-"><-!>
  6058.  
  6059. <:p<* >>
  6060.  
  6061. @Subhead@<:#360,9360>GETENV()   <+">Function<-">
  6062.  
  6063. @Small_Header@<:#259,9360>Function
  6064.  
  6065. <:#240,9360>Access the value of an environment variable.
  6066.  
  6067. @Small_Header@<:#259,9360>Syntax
  6068.  
  6069. <:#202,9360><:f,QCourier,>GETENV(name)<:f>
  6070.  
  6071. @Indent_List@<:#240,9360>    <:f,QCourier,>name<:f>    A string expression with the name of the environment variable to access.
  6072.  
  6073. @Small_Header@<+@><:#259,9360>Return Type & Value
  6074.  
  6075. @Indent_List@<:#245,9360><+!>STRING<-!>    Returns the value of the environment variable specified by name.
  6076.  
  6077. @Small_Header@<:#259,9360>Remarks
  6078.  
  6079. <:#720,9360>This function allows you to access the value of any environment variable set at the time that PCBoard was started.  So, for example, the PATH environment variable could be used to access data files somewhere on the path.
  6080.  
  6081. @Small_Header@<:#259,9360>Examples
  6082.  
  6083. @Example_Text@<:#1274,9360>STRING path<**>LET path = <+!>GETENV()<-!><**>TOKENIZE path<**>LET path = "DATAFILE.TXT"<**>WHILE (!EXIST(path) & (TOKCOUNT() <;> 0)) DO<**>  LET PATH = GETTOKEN()+"DATAFILE.TXT"<**>ENDWHILE<**>IF (EXIST(path)) PRINTLN "Found ",path,"!"
  6084.  
  6085. @Small_Header@<:#259,9360>See Also
  6086.  
  6087. <:#240,9360><+!>
  6088.  
  6089. <:p<* >>
  6090.  
  6091. @Subhead@<:#360,9360>GETTOKEN   <+">Statement<-">
  6092.  
  6093. @Small_Header@<:#259,9360>Function
  6094.  
  6095. <:#245,9360>Retrieve a token from a previous <+!>TOKENIZE<-!> statement.
  6096.  
  6097. @Small_Header@<:#259,9360>Syntax
  6098.  
  6099. <:#202,9360><:f,QCourier,>GETTOKEN var<:f>
  6100.  
  6101. @Indent_List@<:#240,9360>    <:f,QCourier,>var<:f>    Variable to store the retrieved token in.
  6102.  
  6103. @Small_Header@<:#259,9360>Remarks
  6104.  
  6105. <:#1700,9360>One of the strongest features of PCBoard is it's ability to take a series of stacked parameters from a command line and use them all at once instead of requiring the user to navigate a series of menus and select one option at each step of the way.  The 
  6106. <+!>TOKENIZE<-!> statement is the PPL equivalent of what PCBoard uses to break a command line into individual commands (tokens).  The number of tokens available may be accessed via the 
  6107. <+!>TOKCOUNT()<-!> function, and each token may be accessed, one at a time, by the 
  6108. <+!>GETTOKEN<-!> statement and/or the <+!>GETTOKEN()<-!> function.
  6109.  
  6110. @Small_Header@<:#259,9360>Examples
  6111.  
  6112. @Example_Text@<:#1264,9360>STRING  cmdline<**>INPUT "Command",cmdline<**>TOKENIZE cmdline<**>PRINTLN "You entered ",TOKCOUNT()," tokens"<**>WHILE (TOKCOUNT() <;> 0) DO<+!><**>  GETTOKEN cmdline<-!><**>  PRINTLN "Token:  ",CHR(34),cmdline,CHR(34)<**>ENDWHILE
  6113.  
  6114. @Small_Header@<:#259,9360>See Also
  6115.  
  6116. <:#480,9360><-"><-"><-"><-"><+!>GETTOKEN() <+">Function<-">, TOKCOUNT() <+">Function<-!><-"><+!>, TOKENIZE 
  6117. <+">Statement<-">, TOKENSTR() <+">Function<-"><-!><+!><-"><-"><-">
  6118.  
  6119. <:p<* >>
  6120.  
  6121. @Subhead@<:#360,9360>GETTOKEN()   <+">Function<-">
  6122.  
  6123. @Small_Header@<:#259,9360>Function
  6124.  
  6125. <:#245,9360>Retrieve a token from a previous <+!>TOKENIZE<-!> statement.
  6126.  
  6127. @Small_Header@<:#259,9360>Syntax
  6128.  
  6129. <:#202,9360><:f,QCourier,>GETTOKEN()<:f>
  6130.  
  6131. @Indent_List@<:#240,9360>    No arguments are required
  6132.  
  6133. @Small_Header@<:#259,9360>Return Type & Value
  6134.  
  6135. @Indent_List@<:#485,9360><+!>STRING<-!>    Returns the next available token from the most recent 
  6136. <+!>TOKENIZE<-!> statement.
  6137.  
  6138. @Small_Header@<:#259,9360>Remarks
  6139.  
  6140. <:#1700,9360>One of the strongest features of PCBoard is it's ability to take a series of stacked parameters from a command line and use them all at once instead of requiring the user to navigate a series of menus and select one option at each step of the way.  The 
  6141. <+!>TOKENIZE<-!> statement is the PPL equivalent of what PCBoard uses to break a command line into individual commands (tokens).  The number of tokens available may be accessed via the 
  6142. <+!>TOKCOUNT()<-!> function, and each token may be accessed, one at a time, by the 
  6143. <+!>GETTOKEN<-!> statement and/or the <+!>GETTOKEN()<-!> function.
  6144.  
  6145. @Small_Header@<:#259,9360>Examples
  6146.  
  6147. @Example_Text@<:#1274,9360>STRING  cmdline<**>INPUT "Command",cmdline<**>TOKENIZE cmdline<**>PRINTLN "You entered ",TOKCOUNT()," tokens"<**>WHILE (TOKCOUNT() <;> 0) DO<**>  LET cmdline = 
  6148. <+!>GETTOKEN()<-!><**>  PRINTLN "Token:  ",CHR(34),cmdline,CHR(34)<**>ENDWHILE
  6149.  
  6150. @Small_Header@<:#259,9360>See Also
  6151.  
  6152. <:#480,9360><-"><-"><-"><-"><+!>GETTOKEN <+">Statement<-">, TOKCOUNT() <+">Function<-!><-"><+!>, TOKENIZE 
  6153. <+">Statement<-">, TOKENSTR() <+">Function<-"><-!><+!><-"><-"><-">
  6154.  
  6155. <:p<* >>
  6156.  
  6157. @Subhead@<+@><:#360,9360>GETUSER   <+">Statement<-">
  6158.  
  6159. @Small_Header@<+@><:#259,9360>Function
  6160.  
  6161. <+@><:#240,9360>Fill predeclared variables with values from user record.
  6162.  
  6163. @Small_Header@<+@><:#259,9360>Syntax
  6164.  
  6165. <+@><:#202,9360><:f,QCourier,>GETUSER<:f>
  6166.  
  6167. @Indent_List@<+@><:#240,9360>    No arguments are required
  6168.  
  6169. @Small_Header@<+@><:#259,9360>Remarks
  6170.  
  6171. <+@><:#730,9360>There are many predeclared variables which may be used to access and change user information.  However, their values are undefined until you use the 
  6172. <+!>GETUSER<-!> statement, and any changes you make don't take hold until you use the 
  6173. <+!>PUTUSER<-!> statement.
  6174.  
  6175. @Small_Header@<+@><:#259,9360>Examples
  6176.  
  6177. @Example_Text@<+@><:#1580,9360>IF (PSA(3)) THEN<+!><**>  GETUSER<-!><**>  INPUT "Addr 1",U_ADDR(0)<**>  INPUT "Addr 2",U_ADDR(1)<**>  INPUT "City  ",U_ADDR(2)<**>  INPUT "State ",U_ADDR(3)<**>  INPUT "ZIP   ",U_ADDR(4)<**>  INPUT "Cntry ",U_ADDR(5)<**>  PUTUSER<**>ENDIF
  6178.  
  6179. @Small_Header@<+@><:#259,9360>See Also
  6180.  
  6181. <+@><:#240,9360><-"><+!>PUTUSER <+">Statement<-"><-!><-"><-">
  6182.  
  6183. <+@><:p<* >>
  6184.  
  6185. @Subhead@<:#360,9360>GETX() <+">  Function<-">
  6186.  
  6187. @Small_Header@<:#259,9360>Function
  6188.  
  6189. <:#240,9360>Report the X coordinate (column) of the cursor on screen.
  6190.  
  6191. @Small_Header@<:#259,9360>Syntax
  6192.  
  6193. <:#202,9360><:f,QCourier,>GETX<:f><:f,QCourier,>()<:f>
  6194.  
  6195. @Indent_List@<:#240,9360>    No arguments are required
  6196.  
  6197. @Small_Header@<:#259,9360>Return Type and Value
  6198.  
  6199. @Indent_List@<:#245,9360><+!>INTEGER<-!>    Returns the column (1-80) of the cursor on screen.
  6200.  
  6201. @Small_Header@<:#259,9360>Remarks
  6202.  
  6203. <:#725,9360>This function is used to query the ANSI emulator in PCBoard the current X position of the cursor.  It may be used for saving the cursor position for future use or for saving the horizontal cursor position while changing the vertical position with the 
  6204. <+!>ANSIPOS<-!> statement.
  6205.  
  6206. @Small_Header@<:#259,9360>Examples
  6207.  
  6208. @Example_Text@<:#3338,9360>INTEGER x,y<**>STRING s<**><**>WHILE (UPPER(s) <<<;> "QUIT") DO<**><**>  INPUT "Text",s<**>  PRINTLN " - ",s<**><**>  LET x = 
  6209. <+!>GETX()<-!><**>  LET y = GETY()<**>  IF (y = 23) THEN<**>    CLS<**>    LET x = 
  6210. <+!>GETX()<-!><**>    LET y = GETY()<**>  ENDIF<**><**>  ANSIPOS 40,23<**>  PRINT "@X8Fs=",s<**>  ANSIPOS x,y<**><**>ENDWHILE
  6211.  
  6212. @Small_Header@<:#259,9360>See Also
  6213.  
  6214. <:#480,9360><+!>ANSIPOS <+">Statement<-">, ANSION() <+">Function<-">, BACKUP <+">Statement<-">, FORWARD 
  6215. <+">Statement<-">, <-!><+!>GETY() <+">Function<-">, GRAFMODE() <+">Function
  6216.  
  6217. <:p<* >>
  6218.  
  6219. @Subhead@<:#360,9360>GETY() <+">  Function<-">
  6220.  
  6221. @Small_Header@<:#259,9360>Function
  6222.  
  6223. <:#240,9360>Report the Y coordinate (row) of the cursor on screen.
  6224.  
  6225. @Small_Header@<:#259,9360>Syntax
  6226.  
  6227. <:#202,9360><:f,QCourier,>GETY<:f><:f,QCourier,>()<:f>
  6228.  
  6229. @Indent_List@<:#240,9360>    No arguments are required
  6230.  
  6231. @Small_Header@<:#259,9360>Return Type and Value
  6232.  
  6233. @Indent_List@<:#245,9360><+!>INTEGER<-!>    Returns the row (1-23) of the cursor on screen.
  6234.  
  6235. @Small_Header@<:#259,9360>Remarks
  6236.  
  6237. <:#725,9360>This function is used to query the ANSI emulator in PCBoard the current Y position of the cursor.  It may be used for saving the cursor position for future use or for saving the verticle cursor position while changing the horizontal position with the 
  6238. <+!>ANSIPOS<-!> statement.
  6239.  
  6240. @Small_Header@<:#259,9360>Examples
  6241.  
  6242. @Example_Text@<:#3338,9360>INTEGER x,y<**>STRING s<**><**>WHILE (UPPER(s) <<<;> "QUIT") DO<**><**>  INPUT "Text",s<**>  PRINTLN " - ",s<**><**>  LET x = GETX()<**>  LET y = 
  6243. <+!>GETY()<-!><**>  IF (y = 23) THEN<**>    CLS<**>    LET x = GETX()<**>    LET y = 
  6244. <+!>GETY()<-!><**>  ENDIF<**><**>  ANSIPOS 40,23<**>  PRINT "@X8Fs=",s<**>  ANSIPOS x,y<**><**>ENDWHILE
  6245.  
  6246. @Small_Header@<:#259,9360>See Also
  6247.  
  6248. <:#480,9360><+!>ANSIPOS <+">Statement<-">, ANSION() <+">Function<-">, BACKUP <+">Statement<-">, FORWARD 
  6249. <+">Statement<-">, <-!><+!>GETX() <+">Function<-">, GRAFMODE() <+">Function
  6250.  
  6251. <:p<* >>
  6252.  
  6253. @Subhead@<+@><:#360,9360>GOODBYE   <+">Statement<-">
  6254.  
  6255. @Small_Header@<:#259,9360>Function
  6256.  
  6257. <:#240,9360>Log the user off as though they had typed the G (goodbye) command.
  6258.  
  6259. @Small_Header@<:#259,9360>Syntax
  6260.  
  6261. <:#202,9360><:f,QCourier,>GOODBYE<:f>
  6262.  
  6263. @Indent_List@<:#240,9360>    No arguments are required
  6264.  
  6265. @Small_Header@<:#259,9360>Remarks
  6266.  
  6267. <:#1445,9360>There are multiple ways for the user to log off.  One is by typing G at the command prompt.  That will warn them if they have files flagged for download and (optionally) confirm their selection (incase they accidentally hit G and ENTER).  Another is the BYE
  6268.  command.  PCBoard assumes that, if the user typed BYE instead of G, that they really want to log off, didn't type it in accidentally, and want to leave 
  6269. <+!>now<-!>.  The <+!>GOODBYE<-!> statement performs the same processing as the PCBoard G command.
  6270.  
  6271. @Small_Header@<:#259,9360>Examples
  6272.  
  6273. @Example_Text@<:#958,9360>STRING s<**>INPUT "What do you want to do",s<**>IF     (s = "G")   THEN 
  6274. <+!>GOODBYE<-!><**>ELSEIF (s = "BYE") THEN BYE<**>ELSE                    KBDSTUFF s<**>ENDIF
  6275.  
  6276. @Small_Header@<:#259,9360>See Also
  6277.  
  6278. <:#240,9360><+!>BYE <+">Statement<-">, HANGUP <+">Statement<-"><-!>
  6279.  
  6280. <:p<* >>
  6281.  
  6282. @Subhead@<:#360,9360>GOSUB   <+">Statement<-">
  6283.  
  6284. @Small_Header@<:#259,9360>Function
  6285.  
  6286. <:#240,9360>Transfer program control and save the return information.
  6287.  
  6288. @Small_Header@<:#259,9360>Syntax
  6289.  
  6290. <:#202,9360><:f,QCourier,>GOSUB label<:f>
  6291.  
  6292. @Indent_List@<:#240,9360>    <:f,QCourier,>label<:f>    The label to which control should be transferred.
  6293.  
  6294. @Small_Header@<:#259,9360>Remarks
  6295.  
  6296. <:#1215,9360>It is often necessary to perform an indentical set of instructions several times in a program.  This leaves you with two choices.  One, rewrite the code several times (and hope you do it right each time), or two, write it once as a subroutine, then use 
  6297. <+!>GOSUB<-!> to run it.  This statement will save the address of the next line so that a 
  6298. <+!>RETURN<-!> statement at the end of the subroutine can instruct PPL to resume execution with the line following the 
  6299. <+!>GOSUB<-!>.
  6300.  
  6301. @Small_Header@<:#259,9360>Examples
  6302.  
  6303. @Example_Text@<:#2370,9360>STRING Question, Answer<**>LET Question = "What is your street address ..."<+!><**>GOSUB ask<-!><**>LET Question = "What is your city, state and zip ..."<+!><**>GOSUB ask<-!><**>END<**><**>:ask ' Sub to ask a question, get an answer, and log them to a file<**>
  6304. LET Answer = ""<**>PRINTLN "@X0E",Question<**>INPUT "",Answer<**>NEWLINES 2<**>FPUTLN 0,"Q: ",STRIPATX(Question)<**>FPUTLN 0,"A: ",Answer<**>RETURN
  6305.  
  6306. @Small_Header@<:#259,9360>See Also
  6307.  
  6308. <:#240,9360><-"><-"><-"><-"><+!>GOTO <+">Statement<-">, RETURN <+">Statement<-"><-!><-"><+!><-"><-"><-">
  6309.  
  6310. <:p<* >>
  6311.  
  6312. @Subhead@<:#360,9360>GOTO   <+">Statement<-">
  6313.  
  6314. @Small_Header@<:#259,9360>Function
  6315.  
  6316. <:#240,9360>Transfer program control.
  6317.  
  6318. @Small_Header@<:#259,9360>Syntax
  6319.  
  6320. <:#202,9360><:f,QCourier,>GOTO label<:f>
  6321.  
  6322. @Indent_List@<:#240,9360>    <:f,QCourier,>label<:f>    The label to which control should be transferred.
  6323.  
  6324. @Small_Header@<:#259,9360>Remarks
  6325.  
  6326. <:#1700,9360><+!>GOTO<-!> is an essential part of just about every programming language, and it is also an overused part of every one of those languages.  When you need to make a decision and alter program flow based on some condition it is a necessary evil.  For exampl
  6327. e, it is very useful in getting out of deeply nested loops when a critical error of some sort occurs.  For the most part, avoid it if at all possible.  Look for other options to write your program, such as block 
  6328. <+!>IF<-!>, <+!>WHILE<-!>, and <+!>FOR<-!> statements.  They are much easier to understand and maintain than code with 
  6329. <+!>GOTO<-!> statements sprinkled liberally throughout.
  6330.  
  6331. @Small_Header@<:#259,9360>Examples
  6332.  
  6333. @Example_Text@<:#2686,9360>INTEGER i<**>STRING  s<**><**>FOPEN 1,"FILE.DAT",O_RD,S_DW<**><**>WHILE (UPPER(s) <<<;> "QUIT") DO<**>  FGET 1,s<**>  IF (FERR(1)) THEN<**>    PRINTLN "Error, aborting..."<**>    GOTO exit<**>  ENDIF<**>  INC i<**>  PRINTLN "Line ",i,": ",s<**>ENDWHILE<**><**>
  6334. :exit<**>FCLOSE 1
  6335.  
  6336. @Small_Header@<:#259,9360>See Also
  6337.  
  6338. <:#240,9360><-"><-"><-"><-"><+!>GOSUB <+">Statement<-">, RETURN <+">Statement<-"><-!><-"><+!><-"><-"><-">
  6339.  
  6340. <:p<* >>
  6341.  
  6342. @Subhead@<:#360,9360>GRAFMODE() <+">  Function<-">
  6343.  
  6344. @Small_Header@<:#259,9360>Function
  6345.  
  6346. <:#240,9360>Report the graphics mode in use.
  6347.  
  6348. @Small_Header@<:#259,9360>Syntax
  6349.  
  6350. <:#202,9360><:f,QCourier,>GRAFMODE<:f><:f,QCourier,>()<:f>
  6351.  
  6352. @Indent_List@<:#240,9360>    No arguments are required
  6353.  
  6354. @Small_Header@<:#259,9360>Return Type and Value
  6355.  
  6356. @Indent_List@<:#245,9360><+!>STRING<-!>    Returns a letter indicating the current graphics supported.
  6357.  
  6358. @Small_Header@<:#259,9360>Remarks
  6359.  
  6360. <:#960,9360>This function will return one of four possible responses.  "N" will be returned if no graphics support is currently available.  "A" will be returned for non-graphics users that do have ANSI support available for positioning.  "G" will be returned for users 
  6361. who support full ANSI graphics.  Finally, "R" will be returned for users who support RIPscrip.
  6362.  
  6363. @Small_Header@<:#259,9360>Examples
  6364.  
  6365. @Example_Text@<:#1146,9360>IF      (<+!>GRAFMODE()<-!> = "R") THEN PRINT "RIPscrip"<**>ELSE IF (<+!>GRAFMODE()<-!> = "G") THEN PRINT "Full ANSI"<**>ELSE IF (<+!>GRAFMODE()<-!> = "A") THEN PRINT "ANSI positioning"<**>ELSE IF (<+!>GRAFMODE()<-!> = "N") THEN PRINT "No"<**>ELSE          
  6366.                   PRINT "Unknown"<**>ENDIF<**>PRINTLN " Graphics Supported"
  6367.  
  6368. @Small_Header@<:#259,9360>See Also
  6369.  
  6370. <:#480,9360><+!>ANSIPOS <+">Statement<-">, ANSION() <+">Function<-">, BACKUP <+">Statement<-">, FORWARD 
  6371. <+">Statement<-">, <-!><+!>GETX() <+">Function<-">, <-!><+!>GETY() 
  6372. <+">Function<-"><-!>
  6373.  
  6374. <:p<* >>
  6375.  
  6376. @Subhead@<:#360,9360>GRAPH   <+">Constant<-">
  6377.  
  6378. @Small_Header@<:#259,9360>Function
  6379.  
  6380. <:#245,9360>Set the graphics specific file search flag in a <+!>DISPFILE <-!>statement.
  6381.  
  6382. @Small_Header@<:#259,9360>Value
  6383.  
  6384. <:#240,9360>1 = 1b = 1o = 1h
  6385.  
  6386. @Small_Header@<:#259,9360>Remarks
  6387.  
  6388. <:#970,9360>The <+!>DISPFILE<-!> statement will allow you to display a file to the user, and optionally to have PCBoard look for alternate security, graphics, and/or language specific files.  This flag instructs PCBoard to search for alternate graphics files (ANSI or R
  6389. IPscrip) via the G and R suffix.  The current graphics mode may be obtained with the 
  6390. <+!>GRAFMODE()<-!> function.
  6391.  
  6392. @Small_Header@<:#259,9360>Examples
  6393.  
  6394. @Example_Text@<:#484,9360>STRING s<**>DISPFILE "MNUA",SEC+<+!>GRAPH<-!>+LANG<**>INPUT "Option",s
  6395.  
  6396. @Small_Header@<:#259,9360>See Also
  6397.  
  6398. <+@><:#240,9360><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><+!>DISPFILE 
  6399. <+">Statement<-">, GRAFMODE() <+">Function<-">, LANG <+">Constant<-">, SEC 
  6400. <+">Constant<-"><-!><-">
  6401.  
  6402. <:p<* >>
  6403.  
  6404. @Subhead@<:#360,9360>GUIDE   <+">Constant<-">
  6405.  
  6406. @Small_Header@<:#259,9360>Function
  6407.  
  6408. <:#245,9360>Set the display input guide flag in an <+!>INPUTSTR<-!> or <+!>PROMPTSTR<-!> statement.
  6409.  
  6410. @Small_Header@<:#259,9360>Value
  6411.  
  6412. <:#240,9360>4 = 100b = 4o = 4h
  6413.  
  6414. @Small_Header@<:#259,9360>Remarks
  6415.  
  6416. <:#970,9360>The <+!>INPUTSTR<-!> and <+!>PROMPTSTR<-!> statements have the ability to display the length of an input field, regardless of ANSI availability, if you use this constant with the 
  6417. <+!>FIELDLEN<-!> constant.  If ANSI is not available and this constant is used, the user will see the input field width marked using "(---)" above the input field.
  6418.  
  6419. @Small_Header@<:#259,9360>Examples
  6420.  
  6421. @Example_Text@<:#484,9360>STRING pwd<**>INPUTSTR "Enter id number",pwd,@X0E,4,"0123456789",FIELDLEN+<+!>GUIDE<-!><**>IF (pwd <<<;> "1234") PRINTLN "Bad id number"
  6422.  
  6423. @Small_Header@<:#259,9360>See Also
  6424.  
  6425. <:#240,9360><-"><-"><-"><-"><+!>FIELDLEN <+">Constant<-">, INPUTSTR <+">Statement<-">, 
  6426. <-!><-"><-"><+!>PROMPTSTR <+">Statement<-"><-!><-"><-"><-"><-"><-">
  6427.  
  6428. <:p<* >>
  6429.  
  6430. @Subhead@<+@><:#360,9360>HANGUP   <+">Statement<-">
  6431.  
  6432. @Small_Header@<:#259,9360>Function
  6433.  
  6434. <:#240,9360>Hangup on the user and perform abnormal logoff processing.
  6435.  
  6436. @Small_Header@<:#259,9360>Syntax
  6437.  
  6438. <:#202,9360><:f,QCourier,>HANGUP<:f>
  6439.  
  6440. @Indent_List@<:#240,9360>    No arguments are required
  6441.  
  6442. @Small_Header@<:#259,9360>Remarks
  6443.  
  6444. <:#720,9360>This statement is useful in situations where you need to get the caller off immediately without any delay or notice.  It will hangup on the caller, do all logoff processing, and log an abnormal logoff to the callers log.
  6445.  
  6446. @Small_Header@<:#259,9360>Examples
  6447.  
  6448. @Example_Text@<:#1116,9360>STRING s<**>INPUT "What do you want to do",s<**>IF     (s = "G")    THEN 
  6449. <+!>GOODBYE<-!><**>ELSEIF (s = "BYE")  THEN BYE<**>ELSEIF (s = "HANG") THEN HANGUP<**>ELSE                     KBDSTUFF s<**>ENDIF
  6450.  
  6451. @Small_Header@<:#259,9360>See Also
  6452.  
  6453. <:#240,9360><+!>BYE <+">Statement<-">, GOODBYE <+">Statement<-"><-!>
  6454.  
  6455. <:p<* >>
  6456.  
  6457. @Subhead@<:#360,9360>HELPPATH()   <+">Function<-">
  6458.  
  6459. @Small_Header@<:#259,9360>Function
  6460.  
  6461. <:#240,9360>Return the path of help files as defined in PCBSetup.
  6462.  
  6463. @Small_Header@<:#259,9360>Syntax
  6464.  
  6465. <:#202,9360><:f,QCourier,>HELP<:f><:f,QCourier,>PATH<:f><:f,QCourier,>(<:f><:f,QCourier,>)<:f>
  6466.  
  6467. @Indent_List@<:#240,9360>    No arguments are required
  6468.  
  6469. @Small_Header@<:#259,9360>Return Type & Value
  6470.  
  6471. @Indent_List@<:#245,9360><+!>STRING<-!>    Returns the path of the PCBoard help files.
  6472.  
  6473. @Small_Header@<:#259,9360>Remarks
  6474.  
  6475. <:#480,9360>This function will return the path where help files are located as defined in PCBSetup.  This can be useful when you want to add system help capabilities to your PPE application.
  6476.  
  6477. @Small_Header@<:#259,9360>Examples
  6478.  
  6479. @Example_Text@<:#642,9360>PRINTLN "HELP FOR THE R (READ) COMMAND:"<**>PRINTLN "------------------------------"<**>NEWLINE<**>DISPFILE 
  6480. <+!>HELPPATH()<-!>+"HLPR",GRAPH+LANG+SEC
  6481.  
  6482. @Small_Header@<:#259,9360>See Also
  6483.  
  6484. <:#240,9360><-"><-"><-"><-">
  6485.  
  6486. <:p<* >>
  6487.  
  6488. @Subhead@<:#360,9360>HIGHASCII   <+">Constant<-">
  6489.  
  6490. @Small_Header@<:#259,9360>Function
  6491.  
  6492. <:#245,9360>Set the allow high ASCII flag in an <+!>INPUTSTR<-!> or <+!>PROMPTSTR<-!> statement.
  6493.  
  6494. @Small_Header@<:#259,9360>Value
  6495.  
  6496. <:#240,9360>4096 = 1000000000000b = 10000o = 1000h
  6497.  
  6498. @Small_Header@<:#259,9360>Remarks
  6499.  
  6500. <:#725,9360>The <+!>INPUTSTR<-!> and <+!>PROMPTSTR<-!> statements have the ability to allow high ASCII characters to be input regardless of the valid character string specified, but only if the SysOp has disabled the high ASCII filter in PCBSetup.
  6501.  
  6502. @Small_Header@<:#259,9360>Examples
  6503.  
  6504. @Example_Text@<:#642,9360>STRING pwd<**>INPUTSTR "Enter password",pwd,@X0E,4,MASK_ASCII(),<+!>HIGHASCII<**><-!>GETUSER<**>IF (pwd <<<;> U_PWD) HANGUP
  6505.  
  6506. @Small_Header@<:#259,9360>See Also
  6507.  
  6508. <:#240,9360><-"><-"><-"><-"><+!>INPUTSTR <+">Statement<-">, <-!><-"><-"><+!>PROMPTSTR 
  6509. <+">Statement<-"><-!><-"><-"><-"><-"><-">
  6510.  
  6511. <:p<* >>
  6512.  
  6513. @Subhead@<:#360,9360>HOUR()   <+">Function<-">
  6514.  
  6515. @Small_Header@<:#259,9360>Function
  6516.  
  6517. <:#240,9360>Extract the hour from a specified time of day.
  6518.  
  6519. @Small_Header@<:#259,9360>Syntax
  6520.  
  6521. <:#202,9360><:f,QCourier,>HOUR(texp)<:f>
  6522.  
  6523. @Indent_List@<:#240,9360>    <:f,QCourier,>texp<:f>    Any time expression.
  6524.  
  6525. @Small_Header@<+@><:#259,9360>Return Type & Value
  6526.  
  6527. @Indent_List@<:#485,9360><+!>INTEGER<-!>    Returns the hour from the specified time expression (texp).  Valid return values are from 0 to 23.
  6528.  
  6529. @Small_Header@<:#259,9360>Remarks
  6530.  
  6531. <:#485,9360>This function allows you to extract a particular piece of information about a 
  6532. <+!>TIME<-!> value, in this case the hour of the time of day expression.
  6533.  
  6534. @Small_Header@<:#259,9360>Examples
  6535.  
  6536. @Example_Text@<:#168,9360>PRINTLN "The hour is ",<+!>HOUR(TIME())<-!>
  6537.  
  6538. @Small_Header@<:#259,9360>See Also
  6539.  
  6540. <:#240,9360><+!>MIN() <+">Function<-">, SEC() <+">Function<-"><-!><+!><-"><-"><-"><-">
  6541.  
  6542. <:p<* >>
  6543.  
  6544. @Subhead@<:#360,9360>I2S()   <+">Function<-">
  6545.  
  6546. @Small_Header@<:#259,9360>Function
  6547.  
  6548. <:#240,9360>Convert an integer to a string in a specified number base.
  6549.  
  6550. @Small_Header@<:#259,9360>Syntax
  6551.  
  6552. <:#202,9360><:f,QCourier,>I2S(int,base)<:f>
  6553.  
  6554. @Indent_List@<:#240,9360>    <:f,QCourier,>int<:f>    Any integer expression to convert to string format.
  6555.  
  6556. @Indent_List@<:#240,9360>    <:f,QCourier,>base<:f>    An integer expression with the number base (2 through 36) to convert to.
  6557.  
  6558. @Small_Header@<+@><:#259,9360>Return Type & Value
  6559.  
  6560. @Indent_List@<:#245,9360><+!>STRING<-!>    Returns the int converted to a string in the specified number base.
  6561.  
  6562. @Small_Header@<:#259,9360>Remarks
  6563.  
  6564. <:#1205,9360>People work with decimal (base 10) numbers, whereas computers work with binary (base 2) numbers.  It is often more convienient to display numbers in a format other than decimal for clarity, compactness, or other reasons.  This function will convert a number
  6565.  to string format in any number base from 2 to 36.  So, <+!>I2S(10,2)<-!> would return a string of "1010"; 
  6566. <+!>I2S(35,36)<-!> would return "Z".  For more information on number bases, consult 
  6567. <:N737425047,SDR,65535,3,1
  6568. Reference number base theory
  6569.  
  6570. >
  6571. .
  6572.  
  6573. @Small_Header@<:#259,9360>Examples
  6574.  
  6575. @Example_Text@<:#800,9360>INTEGER i,num<**>INPUTINT "Enter a number (decimal)",num,@X0E<**>FOR i = 2 TO 36<**>  PRINTLN num," base 10 = ",<+!>I2S(num,i)<-!>," base ",i<**>NEXT
  6576.  
  6577. @Small_Header@<:#259,9360>See Also
  6578.  
  6579. <:#240,9360><+!>S2I() <+">Function<-"><-!><+!><-"><-"><-"><-">
  6580.  
  6581. <:p<* >>
  6582.  
  6583. @Subhead@<+@><:#360,9360>IF/ELSEIF/ELSE/ENDIF   <+">Statement<-">
  6584.  
  6585. @Small_Header@<:#259,9360>Function
  6586.  
  6587. <:#240,9360>Execute one or more statments if a condition is true.
  6588.  
  6589. @Small_Header@<:#259,9360>Syntax
  6590.  
  6591. <:#2260,9360><:f,QCourier,>IF (bexp) statement<**><:f>-or-<**><:f,QCourier,>IF (bexp) THEN<**>  statement(s)<**><[>ELSEIF (bexp) THEN] ' optional in a block IF<**><[>  statement(s)]<**><[>ELSEIF (bexp) THEN] ' you may have multiple ELSEIF statement(s)<**><[>  statement(
  6592. s)]<**><[>ELSE]               ' optional in a block IF<**><[>  statement(s)]<:f><:f,QCourier,><**>ENDIF<:f>
  6593.  
  6594. @Indent_List@<:#240,9360>    <:f,QCourier,>bexp<:f>    Any boolean expression.
  6595.  
  6596. @Indent_List@<:#240,9360>    <:f,QCourier,>statement<:f>    Any valid PPL statement.
  6597.  
  6598. @Small_Header@<:#259,9360>Remarks
  6599.  
  6600. <:#2445,9360>The <+!>IF<-!> statement supports two types of structures:  logical and block.  A logical 
  6601. <+!>IF<-!> statement is a single statement; if a condition is <+!>TRUE<-!>, execute a single statement.  A block 
  6602. <+!>IF<-!> can be one or more statements with multiple conditions to test for.  The start of a block 
  6603. <+!>IF <-!>loop is differentiated from a logical <+!>IF<-!></`>loop by the 
  6604. <+!>THEN<-!> keyword immediately after the condition.  In a block 
  6605. <+!>IF<-!> statement the first condition to evaluate to <+!>TRUE<-!> will be executed, after which control will be transferred to the statement following the 
  6606. <+!>ENDIF<-!>.  If none of the conditions are <+!>TRUE<-!> by the time an 
  6607. <+!>ELSE<-!> statement is reached then the statements between the 
  6608. <+!>ELSE<-!> and <+!>ENDIF<-!> will be processed.  If none of the conditions are 
  6609. <+!>TRUE<-!> and an <+!>ELSE<-!> statement is never found then none of the conditions will be executed; instead, control will be transferred to the statement after the 
  6610. <+!>ENDIF<-!>.
  6611.  
  6612. @Small_Header@<:#259,9360>Examples
  6613.  
  6614. @Example_Text@<:#1590,9360><+!>IF (CURSEC() << 10)<-!> END ' Insufficient security, terminate execution<+!><**>IF (CURSEC() << 20) THEN<-!><**>  PRINTLN "Your security is less than 20"<+!><**>ELSEIF (CURSEC() <;> 30) THEN<-!><**>  PRINTLN "Your security is greater than 30"<+!><**>ELS
  6615. EIF (CURSEC() = 25) THEN<-!><**>  PRINTLN "Your security is 25"<+!><**>ELSE<-!><**>  PRINTLN "Your security is level",CURSEC()<+!><**>ENDIF<-!>
  6616.  
  6617. @Small_Header@<:#259,9360>See Also
  6618.  
  6619. <:#240,9360><-"><+!>FOR/NEXT <+">Statement<-">, WHILE/ENDWHILE <+">Statement<-"><-!>
  6620.  
  6621. <:p<* >>
  6622.  
  6623. @Subhead@<+@><:#360,9360>INC   <+">Statement<-">
  6624.  
  6625. @Small_Header@<:#259,9360>Function
  6626.  
  6627. <:#240,9360>Increment the value of a variable.
  6628.  
  6629. @Small_Header@<:#259,9360>Syntax
  6630.  
  6631. <:#202,9360><:f,QCourier,>INC<:f><:f,QCourier,> var<:f>
  6632.  
  6633. @Indent_List@<:#240,9360>    <:f,QCourier,>var<:f>    The variable with the value to increment
  6634.  
  6635. @Small_Header@<:#259,9360>Remarks
  6636.  
  6637. <:#960,9360>Many programs require extensive addition and subtraction, and most often, a value is increased or decreased by 1.  This statement allows for a shorter, more efficient method of increasing (incrementing) a value by 1 than adding 1 to a variable and assigning
  6638.  the result to the same variable.
  6639.  
  6640. @Small_Header@<:#259,9360>Examples
  6641.  
  6642. @Example_Text@<:#1116,9360>INTEGER i<**>PRINTLN "Countdown:"<**>LET i = 0<**>WHILE (i <<= 10) DO<**>  PRINTLN "T plus ",i<**>  
  6643. <+!>INC i<-!><**>ENDWHILE
  6644.  
  6645. @Small_Header@<:#259,9360>See Also
  6646.  
  6647. <:#240,9360><+!>DEC <+">Statement<-"><-!><-"><-">
  6648.  
  6649. <:p<* >>
  6650.  
  6651. @Subhead@<:#360,9360>INKEY() <+">  Function<-">
  6652.  
  6653. @Small_Header@<:#259,9360>Function
  6654.  
  6655. <:#240,9360>Get the next key input.
  6656.  
  6657. @Small_Header@<:#259,9360>Syntax
  6658.  
  6659. <:#202,9360><:f,QCourier,>INKEY<:f><:f,QCourier,>()<:f>
  6660.  
  6661. @Indent_List@<:#240,9360>    No arguments are required
  6662.  
  6663. @Small_Header@<:#259,9360>Return Type and Value
  6664.  
  6665. @Indent_List@<:#485,9360><+!>STRING<-!>    Returns a single character for displayable characters or a string for cursor movement and function keys.
  6666.  
  6667. @Small_Header@<:#259,9360>Remarks
  6668.  
  6669. <:#1440,9360>This function will return a single character long string for most key presses.  Additionally, it will return key names for function keys and cursor movement keys if it finds an ANSI sequence or DOORWAY mode sequence.  It will return keystrokes from both the
  6670.  remote caller as well as the local BBS node.  However, realize that many function keys are reserved by PCBoard for BBS related uses and may not be available for your applications that require SysOp input.
  6671.  
  6672. @Small_Header@<:#259,9360>Examples
  6673.  
  6674. @Example_Text@<:#1906,9360>STRING key<**>WHILE (key <<<;> CHR(27)) DO<**>  LET key = <+!>INKEY()<-!><**>  IF (LEFT(key,5) = "SHIFT") THEN<**>    PRINTLN "It was a shifted key"<**>  ELSEIF (LEFT(key,4) = "CTRL") THEN<**>    PRINTLN "It was a control key"<**>  ELSEIF (LEFT(key,3) = "AL
  6675. T") THEN<**>    PRINTLN "It was an alternate key"<**>  ENDIF<**>  PRINTLN "The key was ",key<**>ENDWHILE
  6676.  
  6677. @Small_Header@<:#259,9360>See Also
  6678.  
  6679. <:#240,9360><-"><+!>KINKEY() <+">Function<-!><-"><+!><-">, <-!><+!>MGETBYTE() 
  6680. <+">Function<-!><-"><+!><-">, <-!><+!>MINKEY() <+">Function<-"><-!>
  6681.  
  6682. <:p<* >>
  6683.  
  6684. @Subhead@<:#360,9360>INPUT   <+">Statement<-">
  6685.  
  6686. @Small_Header@<:#259,9360>Function
  6687.  
  6688. <:#240,9360>Prompt the user for a string of text.
  6689.  
  6690. @Small_Header@<:#259,9360>Syntax
  6691.  
  6692. <:#202,9360><:f,QCourier,>INPUT prompt,var<:f>
  6693.  
  6694. @Indent_List@<:#240,9360>    <:f,QCourier,>prompt<:f>    A string expression with the prompt to display to the user.
  6695.  
  6696. @Indent_List@<:#240,9360>    <:f,QCourier,>var<:f>    The variable in which to store the user's input.
  6697.  
  6698. @Small_Header@<:#259,9360>Remarks
  6699.  
  6700. <:#960,9360>This statement will accept any string of input from the user, up to 60 characters maximum length.  In addition to displaying the prompt, it will display parenthesis around the input field if the user is in ANSI mode.  Because of this, you should generally l
  6701. imit your prompts to 15 characters or less.
  6702.  
  6703. @Small_Header@<:#259,9360>Examples
  6704.  
  6705. @Example_Text@<:#2212,9360>BOOLEAN b<**>DATE    d<**>INTEGER i<**>MONEY   m<**>STRING  s<**>TIME    t<+!><**>INPUT "Enter BOOLEAN",b<**>INPUT "Enter DATE",d<**>INPUT "Enter INTEGER",i<**>INPUT "Enter MONEY",m<**>INPUT "Enter STRING",s<**>INPUT "Enter TIME",t<-!><**>PRINTLN b," ",d," 
  6706. ",i<**>PRINTLN m," ",s," ",t
  6707.  
  6708. @Small_Header@<:#259,9360>See Also
  6709.  
  6710. <:#476,9360><-"><-"><-"><-"><-"><-"><-"><-"><-"><+!>INPUT... <+">Statement<-">, INPUTSTR 
  6711. <+">Statement<-">, INPUTTEXT <+">Statement<-">, PROMPTSTR <+">Statement<-!><-">
  6712.  
  6713. <:#240,9360><+!>
  6714.  
  6715. <:p<* >>
  6716.  
  6717. @Subhead@<:#360,9360>INPUT...   <+">Statements<-">
  6718.  
  6719. @Small_Header@<:#259,9360>Function
  6720.  
  6721. <:#480,9360>Prompt the user for a string of text of a specific length and with type dependent valid characters.
  6722.  
  6723. @Small_Header@<:#259,9360>Syntax
  6724.  
  6725. <:#202,9360><:f,QCourier,>INPUT... prompt,var,color<:f>
  6726.  
  6727. @Indent_List@<:#240,9360>    <:f,QCourier,>prompt<:f>    A string expression with the prompt to display to the user.
  6728.  
  6729. @Indent_List@<:#240,9360>    <:f,QCourier,>var<:f>    The variable in which to store the user's input.
  6730.  
  6731. @Indent_List@<:#240,9360>    <:f,QCourier,>color<:f>    An integer expression with the color to display the prompt in.
  6732.  
  6733. <:#480,9360>INPUT should be followed by one of the following types (without spaces between the INPUT and type):  CC, DATE, INT, MONEY, TIME, or YN.
  6734.  
  6735. @Small_Header@<:#259,9360>Remarks
  6736.  
  6737. <:#1440,9360>This statement will accept a string of input from the user, with a set of valid characters and up to a maximum length (MAXLEN) determined by the statement in use.  In addition to displaying the prompt, it will display parenthesis around the input field if t
  6738. he user is in ANSI mode.  Because of this, you should generally limit your prompts to a length determined by the following formula:  (80-MAXLEN-4).  Here are the valid character masks and maximum length values for each of the input statements:
  6739.  
  6740. <:#240,9360>
  6741.  
  6742. <:t3>
  6743.  
  6744. <:#240,9360>
  6745.  
  6746. <:#725,9360>* The <+!>INPUTYN<-!> statement valid characters are dependent on the users language selection.  Usually they will be "YN" for english language systems.  Other letters may be defined for different languages in PCBML.DAT.
  6747.  
  6748. @Small_Header@<:#259,9360>Examples
  6749.  
  6750. @Example_Text@<:#2054,9360><**>DATE    d<**>INTEGER i<**>MONEY   m<**>STRING  cc, yn<**>TIME    t<+!><**>INPUTCC "Enter Credit Card Number",cc<**>INPUTDATE "Enter DATE",d<**>INPUTINT "Enter INTEGER",i<**>INPUTMONEY "Enter MONEY",m<-!><+!><**>INPUTTIME "Enter TIME",t<-!><+!><**>INPUTY
  6751. N "Enter Yes/No Response",s<-!><**>PRINTLN cc," ",d," ",i<**>PRINTLN m," ",t," ",yn
  6752.  
  6753. @Small_Header@<:#259,9360>See Also
  6754.  
  6755. <:#476,9360><-"><-"><-"><-"><-"><-"><-"><-"><-"><+!>INPUT <+">Statement<-">, INPUTSTR 
  6756. <+">Statement<-">, INPUTTEXT <+">Statement<-">, PROMPTSTR <+">Statement<-!><-">
  6757.  
  6758. <:p<* >>
  6759.  
  6760. @Subhead@<:#360,9360>INPUTSTR   <+">Statement<-">
  6761.  
  6762. @Small_Header@<:#259,9360>Function
  6763.  
  6764. <:#240,9360>Prompt the user for a string of text in a specific format.
  6765.  
  6766. @Small_Header@<:#259,9360>Syntax
  6767.  
  6768. <:#202,9360><:f,QCourier,>INPUTSTR prompt,var,color,len,valid,flags<:f>
  6769.  
  6770. @Indent_List@<:#240,9360>    <:f,QCourier,>prompt<:f>    A string expression with the prompt to display to the user.
  6771.  
  6772. @Indent_List@<:#240,9360>    <:f,QCourier,>var<:f>    The variable in which to store the user's input.
  6773.  
  6774. @Indent_List@<:#240,9360>    <:f,QCourier,>color<:f>    An integer expression with the color to display the prompt in.
  6775.  
  6776. @Indent_List@<:#240,9360>    <:f,QCourier,>len<:f>    An integer expression with maximum length of text to input.
  6777.  
  6778. @Indent_List@<:#240,9360>    <:f,QCourier,>valid<:f>    A string expression with the valid characters that the user may enter.
  6779.  
  6780. @Indent_List@<:#240,9360>    <:f,QCourier,>flags<:f>    An integer expression with flags to modify how the statement works.
  6781.  
  6782. @Small_Header@<:#259,9360>Remarks
  6783.  
  6784. <:#2425,9360>This statement will accept a string of input from the user, up to the length defined.  The prompt parameter will be displayed to the user in the specified color before accepting input.  Only characters found in the valid parameter will be accepted.  However
  6785. , the flags parameter may affect how prompt is displayed and the valid characters that are accepted.  Individual flags may be added together as needed.  Several functions exist to easily specify commonly used valid character masks.  They are 
  6786. <+!>MASK_ALNUM()<-!>, <+!>MASK_ALPHA()<-!>, <+!>MASK_ASCII()<-!>, 
  6787. <+!>MASK_FILE()<-!>, <+!>MASK_NUM()<-!>, <+!>MASK_PATH()<-!>, and 
  6788. <+!>MASK_PWD()<-!>.  Defined flag values are <+!>AUTO<-!>, <+!>DEFS<-!>, 
  6789. <+!>ECHODOTS<-!>, <+!>ERASELINE<-!>, <+!>FIELDLEN<-!>, <+!>GUIDE<-!>, 
  6790. <+!>HIGHASCII<-!>, <+!>LFAFTER<-!>, <+!>LFBEFORE<-!>, <+!>NEWLINE<-!>, 
  6791. <+!>NOCLEAR<-!>, <+!>STACKED<-!>, <+!>UPCASE<-!>, <+!>WORDWRAP<-!>, and 
  6792. <+!>YESNO<-!>.
  6793.  
  6794. @Small_Header@<:#259,9360>Examples
  6795.  
  6796. @Example_Text@<:#2212,9360>BOOLEAN b<**>DATE    d<**>INTEGER i<**>MONEY   m<**>STRING  s<**>TIME    t<+!><**>INPUTSTR<-!><+!> "Enter BOOLEAN",b,@X0E,1,"10",LFBEFORE+NEWLINE<**>INPUTSTR<-!><+!> "Enter DATE",d,@X0F,8,"0123456789-",NEWLINE+NOCLEAR<**>INPUTSTR<-!><+!> "Enter INTEGER",i,@
  6797. X07,20,MASK_NUM(),NEWLINE<**>INPUTSTR<-!><+!> "Enter MONEY",m,@X08,9,MASK_NUM()+".",NEWLINE+DEFS+FIELDLEN<**>INPUTSTR<-!><+!> "Enter STRING",s,@X09,63,MASK_ASCII(),NEWLINE+FIELDLEN+GUIDE<**>INPUTSTR<-!><+!> "Enter TIME",t,@X0A,5,"0123456789"+":",NEWLINE+LFA
  6798. FTER<-!><**>PRINTLN b," ",d," ",i<**>PRINTLN m," ",s," ",t
  6799.  
  6800. @Small_Header@<:#259,9360>See Also
  6801.  
  6802. <:#240,9360><-"><-"><-"><-"><-"><-"><-"><-"><-"><+!>INPUT <+">Statement<-">, INPUT... 
  6803. <+">Statement<-">, INPUTTEXT <+">Statement<-">, PROMPTSTR <+">Statement<-!><-">
  6804.  
  6805. <:p<* >>
  6806.  
  6807. @Subhead@<:#360,9360>INPUTTEXT   <+">Statement<-">
  6808.  
  6809. @Small_Header@<:#259,9360>Function
  6810.  
  6811. <:#240,9360>Prompt the user in a specified color for a string of text of specified length.
  6812.  
  6813. @Small_Header@<:#259,9360>Syntax
  6814.  
  6815. <:#202,9360><:f,QCourier,>INPUTTEXT prompt,var,color,len<:f>
  6816.  
  6817. @Indent_List@<:#240,9360>    <:f,QCourier,>prompt<:f>    A string expression with the prompt to display to the user.
  6818.  
  6819. @Indent_List@<:#240,9360>    <:f,QCourier,>var<:f>    The variable in which to store the user's input.
  6820.  
  6821. @Indent_List@<:#240,9360>    <:f,QCourier,>color<:f>    An integer expression with the color to display the prompt in.
  6822.  
  6823. @Indent_List@<:#240,9360>    <:f,QCourier,>len<:f>    An integer expression with maximum length of text to input.
  6824.  
  6825. @Small_Header@<:#259,9360>Remarks
  6826.  
  6827. <:#960,9360>This statement will accept any string of input from the user, up to the length defined.  In addition to displaying the prompt, it will display parenthesis around the input field if the user is in ANSI mode.  Because of this, you should generally limit your 
  6828. prompts to (80-len-4) characters or less.
  6829.  
  6830. @Small_Header@<:#259,9360>Examples
  6831.  
  6832. @Example_Text@<:#2212,9360>BOOLEAN b<**>DATE    d<**>INTEGER i<**>MONEY   m<**>STRING  s<**>TIME    t<+!><**>INPUTTEXT "Enter BOOLEAN",b,@X0E,1<**>INPUT<-!><+!>TEXT<-!><+!> "Enter DATE",d,@X0F,8<**>INPUT<-!><+!>TEXT<-!><+!> "Enter INTEGER",i,@X07,20<**>INPUT<-!><+!>TEXT<-!><+!> "Ente
  6833. r MONEY",m,@X08,9<**>INPUT<-!><+!>TEXT<-!><+!> "Enter STRING",s,@X09,63<**>INPUT<-!><+!>TEXT<-!><+!> "Enter TIME",t,@X0A,5<-!><**>PRINTLN b," ",d," ",i<**>PRINTLN m," ",s," ",t
  6834.  
  6835. @Small_Header@<:#259,9360>See Also
  6836.  
  6837. <:#240,9360><-"><-"><-"><-"><-"><-"><-"><-"><-"><+!>INPUT <+">Statement<-">, INPUT... 
  6838. <+">Statement<-">, INPUTSTR <+">Statement<-">, PROMPTSTR <+">Statement<-!><-">
  6839.  
  6840. <:#240,9360><+!>
  6841.  
  6842. <:p<* >>
  6843.  
  6844. @Subhead@<:#360,9360>INSTR()   <+">Function<-">
  6845.  
  6846. @Small_Header@<:#259,9360>Function
  6847.  
  6848. <:#240,9360>Find the position of one string within another string.
  6849.  
  6850. @Small_Header@<:#259,9360>Syntax
  6851.  
  6852. <:#202,9360><:f,QCourier,>INSTR(str,sub)<:f>
  6853.  
  6854. @Indent_List@<:#240,9360>    <:f,QCourier,>str<:f>    A string expression to look for sub in.
  6855.  
  6856. @Indent_List@<:#240,9360>    <:f,QCourier,>sub<:f>    A string expression to search for.
  6857.  
  6858. @Small_Header@<+@><:#259,9360>Return Type & Value
  6859.  
  6860. @Indent_List@<:#485,9360><+!>INTEGER<-!>    Returns the 1-based position of sub within str or 0 if sub is not found within str.
  6861.  
  6862. @Small_Header@<:#259,9360>Remarks
  6863.  
  6864. <:#720,9360>This function is useful for determining if a particular word or phrase exists in a string.  The return value is the position of the sub string within the longer string.  The first character of str is position 1, the second is position 2, and so on.  If sub 
  6865. is not found in str, 0 is returned.
  6866.  
  6867. @Small_Header@<:#259,9360>Examples
  6868.  
  6869. @Example_Text@<:#958,9360>STRING s<**>WHILE (<+!>INSTR(UPPER(s),"QUIT")<-!> = 0) DO<**>  INPUTTEXT "Enter string",s,@X0E,40<**>  NEWLINE<**>  PRINTLN s<**>ENDWHILE
  6870.  
  6871. @Small_Header@<:#259,9360>See Also
  6872.  
  6873. <:#240,9360><-"><+!><-"><-"><-"><-">
  6874.  
  6875. <:p<* >>
  6876.  
  6877. @Subhead@<:#360,9360>INTEGER   <+">Type<-">
  6878.  
  6879. @Small_Header@<:#259,9360>Function
  6880.  
  6881. <:#240,9360>Declare one or more variables of type integer.
  6882.  
  6883. @Small_Header@<:#259,9360>Syntax
  6884.  
  6885. <:#202,9360><:f200,QCourier,>INTEGER var|arr(s<[>,s<[>,s]])<[>,var|arr(s<[>,s<[>,s]])]<:f>
  6886.  
  6887. @Indent_List@<:#720,9360>    <:f,QCourier,>var<:f>    The name of a variable to declare.  Must start with a letter <[>A-Z] which may be followed by letters, digits <[>0-9] or the underscore <[>_].  May be of any length but only the first 32 characters are used.
  6888.  
  6889. @Indent_List@<:#480,9360>    <:f,QCourier,>arr<:f>    The name of an array variable to declare.  The same naming conventions as var are used.
  6890.  
  6891. @Indent_List@<:#480,9360>    <:f,QCourier,>s<:f>    The size (0-based) of an array variable dimension.  Any constant integer expression is allowed.
  6892.  
  6893. @Small_Header@<:#259,9360>Remarks
  6894.  
  6895. <:#1700,9360><+!>INTEGER<-!> variables are stored as four byte signed long integers.  The range of an 
  6896. <+!>INTEGER<-!> is -2,147,483,648 - +2,147,483,647.  An <+!>INTEGER<-!> assignment to a 
  6897. <+!>STRING<-!> will result in a string with the representation of the number (similar to BASIC's STR$ function and C's ltoa function).  A 
  6898. <+!>STRING<-!> to <+!>INTEGER<-!> assignment will convert the string back to the four byte binary integer value (similar to BASIC's VAL function and C's atol function).  If an 
  6899. <+!>INTEGER<-!> is assigned to or from any other type, an appropriate conversion is performed automatically by PPL.
  6900.  
  6901. @Small_Header@<:#259,9360>Examples
  6902.  
  6903. @Example_Text@<:#158,9360><+!>INTEGER i, year, cardDeck(4*13), matrix(2,2), matrices(3,4,5)<-!>
  6904.  
  6905. @Small_Header@<:#259,9360>See Also
  6906.  
  6907. <:#240,9360><+!>BOOLEAN <+">Type<-">, DATE <+">Type<-">, MONEY <+">Type<-">, STRING 
  6908. <+">Type<-">, TIME <+">Type<-!><-">
  6909.  
  6910. <:p<* >>
  6911.  
  6912. @Subhead@<+@><:#360,9360>JOIN   <+">Statement<-">
  6913.  
  6914. @Small_Header@<:#259,9360>Function
  6915.  
  6916. <:#240,9360>Execute the join conference command with desired sub-commands.
  6917.  
  6918. @Small_Header@<:#259,9360>Syntax
  6919.  
  6920. <:#202,9360><:f,QCourier,>JOIN<:f><:f,QCourier,> cmds<:f>
  6921.  
  6922. @Indent_List@<:#480,9360>    <:f,QCourier,>cmds<:f>    A string expression with any desired sub-commands for the join conference command.
  6923.  
  6924. @Small_Header@<:#259,9360>Remarks
  6925.  
  6926. <:#1205,9360>This statement will allow you to access the join conference (the J command from the main menu), and any join conference sub-commands, under PPE control.  Note that this statement will destroy any previously tokenized string expression.  If you have string t
  6927. okens pending at the time of the <+!>DIR<-!> statment you should save them first and then retokenize after the 
  6928. <+!>DIR<-!> statement is complete.
  6929.  
  6930. @Small_Header@<:#259,9360>Examples
  6931.  
  6932. @Example_Text@<:#484,9360>STRING yn<**>INPUTYN "Join SysOp conference",yn,@X0E<**>IF (yn = YESCHAR()) 
  6933. <+!>JOIN 4<-!>
  6934.  
  6935. @Small_Header@<:#259,9360>See Also
  6936.  
  6937. <:#240,9360><-"><-"><-"><-">
  6938.  
  6939. <:p<* >>
  6940.  
  6941. @Subhead@<+@><:#360,9360>KBDCHKOFF   <+">Statement<-">
  6942.  
  6943. @Small_Header@<:#259,9360>Function
  6944.  
  6945. <:#240,9360>Turn off keyboard timeout checking.
  6946.  
  6947. @Small_Header@<:#259,9360>Syntax
  6948.  
  6949. <:#202,9360><:f,QCourier,>KBDCHKOFF<:f>
  6950.  
  6951. @Indent_List@<:#240,9360>    No arguments are required
  6952.  
  6953. @Small_Header@<:#259,9360>Remarks
  6954.  
  6955. <:#2650,9360>PCBoard has built in automatic keyboard timeout detecting.  What this means is that if someone should remain online for a SysOp defined period of time without typing anything for PCBoard to process, PCBoard will detect it, log it to the callers log, and rec
  6956. ycle back to the call waiting screen.  Some applications require the ability to turn this off; for example, a process that will take a while without interacting with the caller should turn off keyboard timeout testing to keep PCBoard from thinking that the 
  6957. user has stopped entering information.  Normally, PCBoard would just recycle at that point.  So, just before you start a section of code that should continue for a while without user input, you should issue a 
  6958. <+!>KBDCHKOFF<-!> statement.  It will turn off the automatic keyboard timeout checking.  When you've finished the block where keyboard timeout checking has been disabled, issue the 
  6959. <+!>KBDCHKON<-!> statement to turn it back on.
  6960.  
  6961. @Small_Header@<:#259,9360>Examples
  6962.  
  6963. @Example_Text@<:#474,9360><+!>KBDCHKOFF<-!><**>WHILE (RANDOM(10000) <<<;> 0) PRINT "." ' Something to take a long time!<**>KBDCHKON
  6964.  
  6965. @Small_Header@<:#259,9360>See Also
  6966.  
  6967. <:#240,9360><+!>KBDCHKON <+">Statement<-"><-!>
  6968.  
  6969. <:p<* >>
  6970.  
  6971. @Subhead@<+@><:#360,9360>KBDCHKON   <+">Statement<-">
  6972.  
  6973. @Small_Header@<:#259,9360>Function
  6974.  
  6975. <:#240,9360>Turn on keyboard timeout checking.
  6976.  
  6977. @Small_Header@<:#259,9360>Syntax
  6978.  
  6979. <:#202,9360><:f,QCourier,>KBDCHKON<:f>
  6980.  
  6981. @Indent_List@<:#240,9360>    No arguments are required
  6982.  
  6983. @Small_Header@<:#259,9360>Remarks
  6984.  
  6985. <:#2650,9360>PCBoard has built in automatic keyboard timeout detecting.  What this means is that if someone should remain online for a SysOp defined period of time without typing anything for PCBoard to process, PCBoard will detect it, log it to the callers log, and rec
  6986. ycle back to the call waiting screen.  Some applications require the ability to turn this off; for example, a process that will take a while without interacting with the caller should turn off keyboard timeout testing to keep PCBoard from thinking that the 
  6987. user has stopped entering information.  Normally, PCBoard would just recycle at that point.  So, just before you start a section of code that should continue for a while without user input, you should issue a 
  6988. <+!>KBDCHKOFF<-!> statement.  It will turn off the automatic keyboard timeout checking.  When you've finished the block where keyboard timeout checking has been disabled, issue the 
  6989. <+!>KBDCHKON<-!> statement to turn it back on.
  6990.  
  6991. @Small_Header@<:#259,9360>Examples
  6992.  
  6993. @Example_Text@<:#474,9360>KBDCHKOFF<**>WHILE (RANDOM(10000) <<<;> 0) PRINT "." ' Something to take a long time!<+!><**>KBDCHKON<-!>
  6994.  
  6995. @Small_Header@<:#259,9360>See Also
  6996.  
  6997. <:#240,9360><+!>KBDCHKOFF <+">Statement<-"><-!>
  6998.  
  6999. <:p<* >>
  7000.  
  7001. @Subhead@<+@><:#360,9360>KBDFILE   <+">Statement<-">
  7002.  
  7003. @Small_Header@<:#259,9360>Function
  7004.  
  7005. <:#240,9360>Stuff the contents of a text file into the keyboard buffer for later processing.
  7006.  
  7007. @Small_Header@<:#259,9360>Syntax
  7008.  
  7009. <:#202,9360><:f,QCourier,>KBDFILE<:f><:f,QCourier,> file<:f>
  7010.  
  7011. @Indent_List@<:#480,9360>    <:f,QCourier,>file<:f>    A string expression with the filename whose contents should be stuffed into the keyboard buffer.
  7012.  
  7013. @Small_Header@<:#259,9360>Remarks
  7014.  
  7015. <:#965,9360>This statement allows you to feed a series of keystrokes to PCBoard as though they were typed in by the user.  This is useful when you need to feed a series of commands to PCBoard one right after another and they would add up to more than 256 characters (th
  7016. e maximum buffer size for the <+!>KBDSTUFF<-!> statement).
  7017.  
  7018. @Small_Header@<:#259,9360>Examples
  7019.  
  7020. @Example_Text@<:#1422,9360>INTEGER retcode<**>SHOWOFF <**>OPENCAP "NEWFILES.LST",retcode<**>KBDSTUFF CHR(13)<**>DIR "N;S;A;NS"<**>CLOSECAP<**>SHOWON<**>SHELL TRUE,retcode,"PKZIP","-mex NEWFILES NEWFILES.LST"<+!><**>KBDFILE "FLAGFILE.CMD"<-!>
  7021.  
  7022. @Small_Header@<:#259,9360>See Also
  7023.  
  7024. <:#240,9360><-"><-"><-"><-"><+!>KBDSTUFF <+">Statement<-"><-!>
  7025.  
  7026. <:p<* >>
  7027.  
  7028. @Subhead@<+@><:#360,9360>KBDSTUFF   <+">Statement<-">
  7029.  
  7030. @Small_Header@<:#259,9360>Function
  7031.  
  7032. <:#240,9360>Stuff a string into the keyboard buffer for later processing.
  7033.  
  7034. @Small_Header@<:#259,9360>Syntax
  7035.  
  7036. <:#202,9360><:f,QCourier,>KBDSTUFF<:f><:f,QCourier,> str<:f>
  7037.  
  7038. @Indent_List@<:#240,9360>    <:f,QCourier,>str<:f>    A string expression to stuff into the keyboard buffer for later processing.
  7039.  
  7040. @Small_Header@<:#259,9360>Remarks
  7041.  
  7042. <:#1925,9360>This statement allows you to feed a series of keystrokes to PCBoard as though they were typed in by the user.  This can be especially useful when you are replacing an existing command; add your PPE file to the CMD.LST file so that it takes the place of the 
  7043. built in command, then have your PPE stuff the original (or modified command) back to the keyboard buffer.  PCBoard will then process it as soon as you exit your PPE application.  It can also be used when building new commands that should perform several bu
  7044. ilt in operations automatically.  A maximum of 256 characters at a time can be stuffed into the keyboard buffer.  If you need more than this, you should use the 
  7045. <+!>KBDFILE<-!> statement.
  7046.  
  7047. @Small_Header@<:#259,9360>Examples
  7048.  
  7049. @Example_Text@<:#1422,9360>INTEGER retcode<**>SHOWOFF <**>OPENCAP "NEWFILES.LST",retcode<**>KBDSTUFF CHR(13)<**>DIR "N;S;A;NS"<**>CLOSECAP<**>SHOWON<**>SHELL TRUE,retcode,"PKZIP","-mex NEWFILES NEWFILES.LST"<+!><**>KBDSTUFF "FLAG NEWFILES.ZIP"<-!>
  7050.  
  7051. @Small_Header@<:#259,9360>See Also
  7052.  
  7053. <:#240,9360><-"><-"><-"><-"><+!>KBDFILE <+">Statement<-"><-!>
  7054.  
  7055. <:p<* >>
  7056.  
  7057. @Subhead@<:#360,9360>KINKEY() <+">  Function<-">
  7058.  
  7059. @Small_Header@<:#259,9360>Function
  7060.  
  7061. <:#240,9360>Get the next key input from the local keyboard only.
  7062.  
  7063. @Small_Header@<:#259,9360>Syntax
  7064.  
  7065. <:#202,9360><:f,QCourier,>KINKEY<:f><:f,QCourier,>()<:f>
  7066.  
  7067. @Indent_List@<:#240,9360>    No arguments are required
  7068.  
  7069. @Small_Header@<:#259,9360>Return Type and Value
  7070.  
  7071. @Indent_List@<:#485,9360><+!>STRING<-!>    Returns a single character for displayable characters or a string for cursor movement and function keys.
  7072.  
  7073. @Small_Header@<:#259,9360>Remarks
  7074.  
  7075. <:#1200,9360>This function will return a single character long string for most key presses.  Additionally, it will return key names for function keys and cursor movement keys.  It will only return keystrokes from the local BBS node's keyboard.  However, realize that man
  7076. y function keys are reserved by PCBoard for BBS related uses and may not be available for your applications that require SysOp input.
  7077.  
  7078. @Small_Header@<:#259,9360>Examples
  7079.  
  7080. @Example_Text@<:#1906,9360>STRING key<**>WHILE (key <<<;> CHR(27)) DO<**>  LET key = <+!>KINKEY()<-!><**>  IF (LEFT(key,5) = "SHIFT") THEN<**>    PRINTLN "It was a shifted key"<**>  ELSEIF (LEFT(key,4) = "CTRL") THEN<**>    PRINTLN "It was a control key"<**>  ELSEIF (LEFT(key,3) = "A
  7081. LT") THEN<**>    PRINTLN "It was an alternate key"<**>  ENDIF<**>  PRINTLN "The key was ",key<**>ENDWHILE
  7082.  
  7083. @Small_Header@<:#259,9360>See Also
  7084.  
  7085. <:#240,9360><-"><+!>INKEY() <+">Function<-!><-"><+!><-">, <-!><+!>MGETBYTE() <+">Function<-!><-"><+!><-">, 
  7086. <-!><+!>MINKEY() <+">Function<-"><-!>
  7087.  
  7088. <:p<* >>
  7089.  
  7090. @Subhead@<:#360,9360>LANG   <+">Constant<-">
  7091.  
  7092. @Small_Header@<:#259,9360>Function
  7093.  
  7094. <:#245,9360>Set the language specific file search flag in a <+!>DISPFILE <-!>statement.
  7095.  
  7096. @Small_Header@<:#259,9360>Value
  7097.  
  7098. <:#240,9360>4 = 100b = 4o = 4h
  7099.  
  7100. @Small_Header@<:#259,9360>Remarks
  7101.  
  7102. <:#970,9360>The <+!>DISPFILE<-!> statement will allow you to display a file to the user, and optionally to have PCBoard look for alternate security, graphics, and/or language specific files.  This flag instructs PCBoard to search for alternate language files via the la
  7103. nguage extension.  The current language extension may be obtained with the 
  7104. <+!>LANGEXT()<-!> function.
  7105.  
  7106. @Small_Header@<:#259,9360>Examples
  7107.  
  7108. @Example_Text@<:#484,9360>STRING s<**>DISPFILE "MNUA",SEC+GRAPH+<+!>LANG<-!><**>INPUT "Option",s
  7109.  
  7110. @Small_Header@<:#259,9360>See Also
  7111.  
  7112. <+@><:#240,9360><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><+!>DISPFILE 
  7113. <+">Statement<-">, GRAPH <+">Constant<-">, LANGEXT() <+">Function<-">, SEC 
  7114. <+">Constant<-"><-!><-">
  7115.  
  7116. <:p<* >>
  7117.  
  7118. @Subhead@<:#360,9360>LANGEXT() <+">  Function<-">
  7119.  
  7120. @Small_Header@<:#259,9360>Function
  7121.  
  7122. <:#240,9360>Get the file extension for the current language.
  7123.  
  7124. @Small_Header@<:#259,9360>Syntax
  7125.  
  7126. <:#202,9360><:f,QCourier,>LANGEXT<:f><:f,QCourier,>()<:f>
  7127.  
  7128. @Indent_List@<:#240,9360>    No arguments are required
  7129.  
  7130. @Small_Header@<:#259,9360>Return Type and Value
  7131.  
  7132. @Indent_List@<:#725,9360><+!>STRING<-!>    Returns a ".XXX" formatted string where XXX is the extension text (could be 1, 2 or 3 characters long depending on the configuration and language in use).
  7133.  
  7134. @Small_Header@<:#259,9360>Remarks
  7135.  
  7136. <:#720,9360>This function allows you to access the file extension used by SysOp definable and system language specific files.  You may use it to create your own filenames that are language specific.
  7137.  
  7138. @Small_Header@<:#259,9360>Examples
  7139.  
  7140. @Example_Text@<:#800,9360>PRINTLN "Brief user profile"<**>NEWLINE<**>PRINTLN "     Security:  ",CURSEC()<**>PRINTLN "Graphics Mode:  ",GRAFMODE()<**>PRINTLN "     Language:  ",<+!>LANGEXT()<-!>
  7141.  
  7142. @Small_Header@<:#259,9360>See Also
  7143.  
  7144. <:#240,9360><-"><-">
  7145.  
  7146. <:p<* >>
  7147.  
  7148. @Subhead@<:#360,9360>LEFT()   <+">Function<-">
  7149.  
  7150. @Small_Header@<:#259,9360>Function
  7151.  
  7152. <:#240,9360>Access the left most characters from a string.
  7153.  
  7154. @Small_Header@<:#259,9360>Syntax
  7155.  
  7156. <:#202,9360><:f,QCourier,>LEFT<:f><:f,QCourier,>(str,chars)<:f>
  7157.  
  7158. @Indent_List@<:#240,9360>    <:f,QCourier,>str<:f>    A string expression to take the left most characters of.
  7159.  
  7160. @Indent_List@<:#480,9360>    <:f,QCourier,>chars<:f>    An integer expression with the number of characters to take from the left end of str.
  7161.  
  7162. @Small_Header@<+@><:#259,9360>Return Type & Value
  7163.  
  7164. @Indent_List@<:#245,9360><+!>STRING<-!>    Returns a string with the left most chars characters of str.
  7165.  
  7166. @Small_Header@<:#259,9360>Remarks
  7167.  
  7168. <:#960,9360>This function will return a sub string with the left most chars characters of a specified string.  This can be useful in data processing as well as text formatting.  If chars is less than or equal to 0 then the returned string will be empty.  If chars is gr
  7169. eater than the length of str then the returned string will have spaces added to the left to pad it out to the full length specified.
  7170.  
  7171. @Small_Header@<:#259,9360>Examples
  7172.  
  7173. @Example_Text@<:#1600,9360>WHILE (RANDOM(250) <<<;> 0) PRINT <+!>LEFT(RANDOM(250),4)<-!>," "<**><**>STRING s<**>FOPEN 1,"DATA.TXT",O_RD,S_DN<**>WHILE (!FERR(1)) DO<**>  FGET 1,s<**>  PRINT RTRIM(<+!>LEFT(s,25)<-!>," ")," - "<**>  PRINTLN RIGHT(s,LEN(s)-25)<**>ENDWHILE<**>FCLOSE 1
  7174.  
  7175. @Small_Header@<:#259,9360>See Also
  7176.  
  7177. <:#240,9360><-"><-"><-"><-"><-"><+!>MID() <+">Function<-">, RIGHT() <+">Function<-"><-!>
  7178.  
  7179. <:p<* >>
  7180.  
  7181. @Subhead@<:#360,9360>LEN()   <+">Function<-">
  7182.  
  7183. @Small_Header@<:#259,9360>Function
  7184.  
  7185. <:#240,9360>Access the length of a string.
  7186.  
  7187. @Small_Header@<:#259,9360>Syntax
  7188.  
  7189. <:#202,9360><:f,QCourier,>LEN<:f><:f,QCourier,>(str)<:f>
  7190.  
  7191. @Indent_List@<:#240,9360>    <:f,QCourier,>str<:f>    Any string expression.
  7192.  
  7193. @Small_Header@<+@><:#259,9360>Return Type & Value
  7194.  
  7195. @Indent_List@<:#245,9360><+!>INTEGER<-!>    Returns the length of a string.
  7196.  
  7197. @Small_Header@<:#259,9360>Remarks
  7198.  
  7199. <:#480,9360>This function will return the length of a string.  The value returned will always be between 0 (an empty string) and 256 (the maximum length of a string).
  7200.  
  7201. @Small_Header@<:#259,9360>Examples
  7202.  
  7203. @Example_Text@<:#1116,9360>STRING s<**>FOPEN 1,"DATA.TXT",O_RD,S_DN<**>WHILE (!FERR(1)) DO<**>  FGET 1,s<**>  PRINTLN "The length of the current string is ",<+!>LEN(s)<-!><**>ENDWHILE<**>FCLOSE 1
  7204.  
  7205. @Small_Header@<:#259,9360>See Also
  7206.  
  7207. <:#240,9360><-"><-"><-"><-"><-"><-">
  7208.  
  7209. <:p<* >>
  7210.  
  7211. @Subhead@<+@><:#360,9360>LET   <+">Statement<-">
  7212.  
  7213. @Small_Header@<:#259,9360>Function
  7214.  
  7215. <:#240,9360>Evaluate an expression and assign the result to a variable.
  7216.  
  7217. @Small_Header@<:#259,9360>Syntax
  7218.  
  7219. <:#644,9360><:f,QCourier,>LET var = expr<:f><**>-or-<**><:f,QCourier,>var = expr<:f>
  7220.  
  7221. @Indent_List@<:#240,9360>    <:f,QCourier,>var<:f>    Variable to which the result of expr should be assigned.
  7222.  
  7223. @Indent_List@<:#240,9360>    <:f,QCourier,>expr<:f>    Any valid PPL expression.
  7224.  
  7225. @Small_Header@<:#259,9360>Remarks
  7226.  
  7227. <:#2450,9360>The <+!>LET<-!> statement supports modes of operation:  explicit and implicit.  An explicit 
  7228. <+!>LET<-!> statement always includes all of the parts in the first example above (the 
  7229. <+!>LET<-!> keyword, the variable, the equal sign, and the expression).  An implicit 
  7230. <+!>LET<-!> statement does not need the <+!>LET<-!> keyword; the format (var = expr) is sufficient.  However, the implicit form will not always work.  For example, if you had a variable named 
  7231. <+!>PRINT<-!> (which is also a statement name) you could not use <+!>PRINT = expr<-!>; PPL expects the first word on a line to be a statement name, and if it isn't, it is an implicit 
  7232. <+!>LET<-!> statement.  Since PPL would find the <+!>PRINT<-!> statement first it would try to process the rest of the line as a 
  7233. <+!>PRINT<-!> statement.  This is easily avoided by using the <+!>LET<-!> keyword and making it an explicit 
  7234. <+!>LET<-!> statement (<+!>LET PRINT = expr<-!>).
  7235.  
  7236. @Small_Header@<:#259,9360>Examples
  7237.  
  7238. @Example_Text@<:#1106,9360>INTEGER i<**>STRING  s<**>GETUSER<+!><**>LET U_PWD = "NEWPWD"<**>LET s = "This is a string"<**>LET i = 7*9+9*7<-!><**>PUTUSER
  7239.  
  7240. @Small_Header@<:#259,9360>See Also
  7241.  
  7242. <:#240,9360><-"><-">
  7243.  
  7244. <:p<* >>
  7245.  
  7246. @Subhead@<:#360,9360>LFAFTER   <+">Constant<-">
  7247.  
  7248. @Small_Header@<:#259,9360>Function
  7249.  
  7250. <:#485,9360>Set the extra line feed after prompt flag in a <+!>DISPTEXT<-!>, <+!>INPUTSTR<-!>, or 
  7251. <+!>PROMPTSTR<-!> statement.
  7252.  
  7253. @Small_Header@<:#259,9360>Value
  7254.  
  7255. <:#240,9360>256 = 100000000b = 400o = 100h
  7256.  
  7257. @Small_Header@<:#259,9360>Remarks
  7258.  
  7259. <:#730,9360>The <+!>INPUTSTR<-!>, <+!>PROMPTSTR<-!>, and <+!>DISPTEXT<-!> statements have the ability to send an extra carriage return/line feed after a prompt is displayed automatically and without the need to make a separate call to the 
  7260. <+!>NEWLINE<-!> statement.
  7261.  
  7262. @Small_Header@<:#259,9360>Examples
  7263.  
  7264. @Example_Text@<:#484,9360>STRING pwd<**>INPUTSTR "Enter id",pwd,@X0E,4,"0123456789",LFBEFORE+NEWLINE+<+!>LFAFTER<-!><**>IF (pwd <<<;> "1234") PRINTLN "Bad id number"
  7265.  
  7266. @Small_Header@<:#259,9360>See Also
  7267.  
  7268. <:#480,9360><-"><-"><-"><-"><+!>DISPTEXT<-!><+!> <+">Statement<-!><-"><+!><-">, INPUTSTR 
  7269. <+">Statement<-">, <-"><-">LFBEFORE <+">Constant<-">, <-!><+!>NEWLINE 
  7270. <+">Constant<-">, <-!><+!>PROMPTSTR <+">Statement<-"><-!><-"><-"><-"><-"><-"><-">
  7271.  
  7272. <:p<* >>
  7273.  
  7274. @Subhead@<:#360,9360>LFBEFORE   <+">Constant<-">
  7275.  
  7276. @Small_Header@<:#259,9360>Function
  7277.  
  7278. <:#485,9360>Set the line feed before prompt flag in a <+!>DISPTEXT<-!>, <+!>INPUTSTR<-!>, or 
  7279. <+!>PROMPTSTR<-!> statement.
  7280.  
  7281. @Small_Header@<:#259,9360>Value
  7282.  
  7283. <:#240,9360>128 = 10000000b = 200o = 80h
  7284.  
  7285. @Small_Header@<:#259,9360>Remarks
  7286.  
  7287. <:#730,9360>The <+!>INPUTSTR<-!>, <+!>PROMPTSTR<-!>, and <+!>DISPTEXT<-!> statements have the ability to send a carriage return/line feed before a prompt is displayed automatically and without the need to make a separate call to the 
  7288. <+!>NEWLINE<-!> statement.
  7289.  
  7290. @Small_Header@<:#259,9360>Examples
  7291.  
  7292. @Example_Text@<:#484,9360>STRING pwd<**>INPUTSTR "Enter id",pwd,@X0E,4,"0123456789",<+!>LFBEFORE<-!>+NEWLINE+LFAFTER<**>IF (pwd <<<;> "1234") PRINTLN "Bad id"
  7293.  
  7294. @Small_Header@<:#259,9360>See Also
  7295.  
  7296. <:#480,9360><-"><-"><-"><-"><+!>DISPTEXT<-!><+!> <+">Statement<-!><-"><+!><-">, INPUTSTR 
  7297. <+">Statement<-">, <-"><-">LFAFTER <+">Constant<-">, <-!><+!>NEWLINE 
  7298. <+">Constant<-">, <-!><+!>PROMPTSTR <+">Statement<-"><-!><-"><-"><-"><-"><-"><-">
  7299.  
  7300. <:p<* >>
  7301.  
  7302. @Subhead@<+@><:#360,9360>LOG   <+">Statement<-">
  7303.  
  7304. @Small_Header@<:#259,9360>Function
  7305.  
  7306. <:#240,9360>Log a message to the callers log.
  7307.  
  7308. @Small_Header@<:#259,9360>Syntax
  7309.  
  7310. <:#202,9360><:f,QCourier,>LOG msg,left<:f>
  7311.  
  7312. @Indent_List@<:#240,9360>    <:f,QCourier,>msg<:f>    A string expression to write to the callers log.
  7313.  
  7314. @Indent_List@<:#490,9360>    <:f,QCourier,>left<:f>    A boolean expression with value <+!>TRUE<-!> if msg should be left justified, 
  7315. <+!>FALSE<-!> if msg should be indented six spaces.
  7316.  
  7317. @Small_Header@<:#259,9360>Remarks
  7318.  
  7319. <:#720,9360>There are two primary uses for this statement.  First and foremost, it allows you to keep the SysOp informed of what the user does while using your PPL application.  Secondly, it can allow you to track information within your PPE while debugging.
  7320.  
  7321. @Small_Header@<:#259,9360>Examples
  7322.  
  7323. @Example_Text@<:#800,9360>BOOLEAN flag<**>PRINT "Type QUIT to exit..."<**>WAITFOR "QUIT",flag,60<**>IF (!flag) 
  7324. <+!>LOG "User did not type QUIT",FALSE<-!><**><+!>LOG "***EXITING PPE***",TRUE<-!>
  7325.  
  7326. @Small_Header@<:#259,9360>See Also
  7327.  
  7328. <:#240,9360><-"><-"><-"><-"><-">
  7329.  
  7330. <:p<* >>
  7331.  
  7332. @Subhead@<:#360,9360>LOGGEDON() <+">  Function<-">
  7333.  
  7334. @Small_Header@<:#259,9360>Function
  7335.  
  7336. <:#240,9360>Determine if a user has completely logged on to the BBS.
  7337.  
  7338. @Small_Header@<:#259,9360>Syntax
  7339.  
  7340. <:#202,9360><:f,QCourier,>LOGGEDON<:f><:f,QCourier,>()<:f>
  7341.  
  7342. @Indent_List@<:#240,9360>    No arguments are required
  7343.  
  7344. @Small_Header@<:#259,9360>Return Type and Value
  7345.  
  7346. @Indent_List@<:#245,9360><+!>BOOLEAN<-!>    Returns <+!>TRUE<-!> if the user has completed logging in, 
  7347. <+!>FALSE<-!> otherwise.
  7348.  
  7349. @Small_Header@<:#259,9360>Remarks
  7350.  
  7351. <:#965,9360>There are some features of PPL that are not available until the user has completely logged in, such as the user variables and functions and the 
  7352. <+!>CALLNUM()<-!> function.  This function will allow you to detect whether or not a user has completely logged in and if selected PPL features are available.
  7353.  
  7354. @Small_Header@<:#259,9360>Examples
  7355.  
  7356. @Example_Text@<:#168,9360>IF (!<+!>LOGGEDON()<-!>) LOG "USER NOT LOGGED ON",0
  7357.  
  7358. @Small_Header@<:#259,9360>See Also
  7359.  
  7360. <:#240,9360><-"><-">
  7361.  
  7362. <:p<* >>
  7363.  
  7364. @Subhead@<:#360,9360>LOGIT   <+">Constant<-">
  7365.  
  7366. @Small_Header@<:#259,9360>Function
  7367.  
  7368. <:#245,9360>Set the write prompt to callers log flag in a <+!>DISPTEXT<-!> statement.
  7369.  
  7370. @Small_Header@<:#259,9360>Value
  7371.  
  7372. <:#240,9360>32768 = 1000000000000000b = 100000o = 8000h
  7373.  
  7374. @Small_Header@<:#259,9360>Remarks
  7375.  
  7376. <:#730,9360>The <+!>DISPTEXT<-!> statement has the ability to write a specified prompt to the callers log automatically without the need to use the 
  7377. <+!>LOG<-!> statement.  This flag will indent the prompt six spaces in the callers log.
  7378.  
  7379. @Small_Header@<:#259,9360>Examples
  7380.  
  7381. @Example_Text@<:#168,9360>DISPTEXT 4,LFBEFORE+LFAFTER+BELL+<+!>LOGIT<-!>
  7382.  
  7383. @Small_Header@<:#259,9360>See Also
  7384.  
  7385. <:#240,9360><-"><-"><-"><-"><+!>DISPTEXT<-!><+!> <+">Statement<-!><-"><+!><-">, 
  7386. <-!><+!>LOGITLEFT <+">Constant<-!><-">
  7387.  
  7388. <:p<* >>
  7389.  
  7390. @Subhead@<:#360,9360>LOGITLEFT   <+">Constant<-">
  7391.  
  7392. @Small_Header@<:#259,9360>Function
  7393.  
  7394. <:#245,9360>Set the write prompt to callers log left justified flag in a <+!>DISPTEXT<-!> statement.
  7395.  
  7396. @Small_Header@<:#259,9360>Value
  7397.  
  7398. <:#240,9360>65536 = 10000000000000000b = 200000o = 10000h
  7399.  
  7400. @Small_Header@<:#259,9360>Remarks
  7401.  
  7402. <:#730,9360>The <+!>DISPTEXT<-!> statement has the ability to write a specified prompt to the callers log automatically without the need to use the 
  7403. <+!>LOG<-!> statement.  This flag will not indent the prompt in the callers log.
  7404.  
  7405. @Small_Header@<:#259,9360>Examples
  7406.  
  7407. @Example_Text@<:#168,9360>DISPTEXT 4,LFBEFORE+LFAFTER+BELL+<+!>LOGITLEFT<-!>
  7408.  
  7409. @Small_Header@<:#259,9360>See Also
  7410.  
  7411. <:#240,9360><-"><-"><-"><-"><+!>DISPTEXT<-!><+!> <+">Statement<-!><-"><+!><-">, 
  7412. <-!><+!>LOGIT <+">Constant<-!><-">
  7413.  
  7414. <:p<* >>
  7415.  
  7416. @Subhead@<:#360,9360>LOWER()   <+">Function<-">
  7417.  
  7418. @Small_Header@<:#259,9360>Function
  7419.  
  7420. <:#240,9360>Converts uppercase characters in a string to lowercase.
  7421.  
  7422. @Small_Header@<:#259,9360>Syntax
  7423.  
  7424. <:#202,9360><:f,QCourier,>LOWER(sexp)<:f>
  7425.  
  7426. @Indent_List@<:#240,9360>    <:f,QCourier,>sexp<:f>    Any string expression.
  7427.  
  7428. @Small_Header@<+@><:#259,9360>Return Type & Value
  7429.  
  7430. @Indent_List@<:#245,9360><+!>STRING<-!>    Returns sexp with all uppercase characters converted to lowercase.
  7431.  
  7432. @Small_Header@<:#259,9360>Remarks
  7433.  
  7434. <:#1205,9360>Although "STRING" is technically different from "string" (ie, the computer doesn't recognize them as being the same because one is uppercase and the other is lowercase), it is often necessary to save, display or compare information in a case insensitive for
  7435. mat.  This function will return a string with all uppercase characters converted to lowercase.  So, using the above example, 
  7436. <+!>LOWER("STRING")<-!> would return "string".
  7437.  
  7438. @Small_Header@<:#259,9360>Examples
  7439.  
  7440. @Example_Text@<:#800,9360>STRING s<**>WHILE (UPPER(s) <<<;> "QUIT") DO<**>  INPUT "Text",s<**>  PRINTLN 
  7441. <+!>LOWER(s)<-!><**>ENDWHILE
  7442.  
  7443. @Small_Header@<:#259,9360>See Also
  7444.  
  7445. <:#240,9360><+!>UPPER() <+">Function<-"><-!><-"><-"><-">
  7446.  
  7447. <:p<* >>
  7448.  
  7449. @Subhead@<:#360,9360>LTRIM()   <+">Function<-">
  7450.  
  7451. @Small_Header@<:#259,9360>Function
  7452.  
  7453. <:#240,9360>Trim a specified character from the left end of a string.
  7454.  
  7455. @Small_Header@<:#259,9360>Syntax
  7456.  
  7457. <:#202,9360><:f,QCourier,>LTRIM(str,ch)<:f>
  7458.  
  7459. @Indent_List@<:#240,9360>    <:f,QCourier,>str<:f>    Any string expression.
  7460.  
  7461. @Indent_List@<:#240,9360>    <:f,QCourier,>ch<:f>    A string with the character to strip from the left end of str.
  7462.  
  7463. @Small_Header@<:#259,9360>Return Type & Value
  7464.  
  7465. @Indent_List@<:#245,9360><+!>STRING<-!>    Returns the trimmed str.
  7466.  
  7467. @Small_Header@<:#259,9360>Remarks
  7468.  
  7469. <:#720,9360>A common need in programming is to strip leading and/or trailing spaces (or other characters).  This function will strip a specified character from the left end of a string and return the trimmed string.
  7470.  
  7471. @Small_Header@<:#259,9360>Examples
  7472.  
  7473. @Example_Text@<:#820,9360>STRING s<**>LET s = "   TEST   "<**>PRINTLN <+!>LTRIM(s," ")<-!> ' Will print "TEST   "<**>PRINTLN 
  7474. <+!>LTRIM(".....DA"+"TA.....",".")<-!> ' Will print "DATA....."<**>PRINTLN 
  7475. <+!>LTRIM(".....DA"+"TA....."," ")<-!> ' Will print ".....DATA....."
  7476.  
  7477. @Small_Header@<:#259,9360>See Also
  7478.  
  7479. <:#240,9360><-"><-"><-"><-"><-"><-"><-"><-"><-"><+!><-"><-"><-">RTRIM() <+">Function<-">, TRIM() 
  7480. <+">Function<-">
  7481.  
  7482. <:p<* >>
  7483.  
  7484. @Subhead@<:#360,9360>MASK_...()   <+">Functions<-">
  7485.  
  7486. @Small_Header@<:#259,9360>Function
  7487.  
  7488. <:#240,9360>Return a string for use as a valid character mask.
  7489.  
  7490. @Small_Header@<:#259,9360>Syntax
  7491.  
  7492. <:#202,9360><:f,QCourier,>MASK_...<:f><:f,QCourier,>()<:f>
  7493.  
  7494. @Indent_List@<:#240,9360>    No arguments are required
  7495.  
  7496. <:#480,9360>MASK_ should be followed by one of the following mask types:  ALNUM, ALPHA, ASCII, FILE, NUM, PATH, or PWD.
  7497.  
  7498. @Small_Header@<:#259,9360>Return Type and Value
  7499.  
  7500. @Indent_List@<:#490,9360><+!>STRING<-!>    Returns a string with a set of characters to use as valid input for an 
  7501. <+!>INPUTSTR<-!> or <+!>PROMPTSTR<-!> statement.
  7502.  
  7503. @Small_Header@<:#259,9360>Remarks
  7504.  
  7505. <:#2190,9360>There are many situations in which you will need to use an <+!>INPUTSTR<-!> or 
  7506. <+!>PROMPTSTR<-!> statement to access the input field length of flags.  However, all you need to use a 'standard' set of input characters.  These functions provide you with some of the most common valid character masks.  They are:  
  7507. <+!>MASK_ALNUM()<-!> which returns A-Z, a-z, and 0-9; <+!>MASK_ALPHA()<-!> which returns A-Z and a-z; 
  7508. <+!>MASK_ASCII()<-!> which returns all characters from space (ASCII 32) to tilde (ASCII 126); 
  7509. <+!>MASK_FILE()<-!> which returns all legal file name characters; 
  7510. <+!>MASK_NUM()<-!> which returns 0-9; <+!>MASK_PATH()<-!> which returns all legal path name characters; and, finally, 
  7511. <+!>MASK_PWD()<-!> which returns a set of valid characters for use in passwords.
  7512.  
  7513. @Small_Header@<:#259,9360>Examples
  7514.  
  7515. @Example_Text@<:#820,9360>INTEGER i<**>STRING  s<**>INPUTSTR "Enter a number from 0 to 1000",i,@X0E,4,<+!>MASK_NUM()<-!>,DEFS<**>PROMPTSTR 148,s,12,<+!>MASK_PWD()<-!>,ECHODOTS<**>INPUTSTR "Enter your comment",s,@X0E,60,<+!>MASK_ASCII()<-!>,DEFS
  7516.  
  7517. @Small_Header@<:#259,9360>See Also
  7518.  
  7519. <:#240,9360><-"><-"><+!>INPUTSTR <+">Statement<-">, PROMPTSTR <+">Statement<-"><-!>
  7520.  
  7521. <:p<* >>
  7522.  
  7523. @Subhead@<:#360,9360>MAXNODE() <+">  Function<-">
  7524.  
  7525. @Small_Header@<:#259,9360>Function
  7526.  
  7527. <:#240,9360>Determine how many nodes a system may have.
  7528.  
  7529. @Small_Header@<:#259,9360>Syntax
  7530.  
  7531. <:#202,9360><:f,QCourier,>MAXNODE<:f><:f,QCourier,>()<:f>
  7532.  
  7533. @Indent_List@<:#240,9360>    No arguments are required
  7534.  
  7535. @Small_Header@<:#259,9360>Return Type and Value
  7536.  
  7537. @Indent_List@<:#245,9360><+!>INTEGER<-!>    Returns the node limit available to the system running the PPE file.
  7538.  
  7539. @Small_Header@<:#259,9360>Remarks
  7540.  
  7541. <:#960,9360>Every package of PCBoard purchased comes with a license agreement that limits it to a maximum number of nodes.  This node limit restricts various features of PCBoard, such as the WHO display and CHAT functions.  This limit is available to your PPL applicati
  7542. ons via this function.
  7543.  
  7544. @Small_Header@<:#259,9360>Examples
  7545.  
  7546. @Example_Text@<:#1274,9360>INTEGER i<**>FOR i = 1 TO <+!>MAXNODE()<-!><**>  RDUNET i<**>  IF ((UN_STAT() = "A") | (UN_STAT() = "U")) THEN<**>    BROADCAST i,i,"Hello, how are you?"<**>    IF (PCBNODE() = i) PRINLN "Quit talking to yourself"<**>  ENDIF<**>NEXT
  7547.  
  7548. @Small_Header@<:#259,9360>See Also
  7549.  
  7550. <:#240,9360><-"><-">
  7551.  
  7552. <:p<* >>
  7553.  
  7554. @Subhead@<:#360,9360>MESSAGE   <+">Statement<-">
  7555.  
  7556. @Small_Header@<:#259,9360>Function
  7557.  
  7558. <:#240,9360>Enter a message under PPL control.
  7559.  
  7560. @Small_Header@<:#259,9360>Syntax
  7561.  
  7562. <:#202,9360><:f,QCourier,>MESSAGE conf,to,from,sub,sec,pack,rr,echo,file<:f>
  7563.  
  7564. @Indent_List@<:#240,9360>    <:f,QCourier,>conf<:f>    An integer expression with the conference in which to post the message.
  7565.  
  7566. @Indent_List@<:#480,9360>    <:f,QCourier,>to<:f>    A string expression with the user name to which the message should be sent.
  7567.  
  7568. @Indent_List@<:#480,9360>    <:f,QCourier,>from<:f>    A string expression with the user name that the message should be sent from.
  7569.  
  7570. @Indent_List@<:#240,9360>    <:f,QCourier,>sub<:f>    A string expression with the subject of the message.
  7571.  
  7572. @Indent_List@<:#480,9360>    <:f,QCourier,>sec<:f>    A string expression with the desired security for the message ("N"for none or "R" for receiver only).
  7573.  
  7574. @Indent_List@<:#480,9360>    <:f,QCourier,>pack<:f>    A date expression with the packout date for the message (or 0 for no packout date).
  7575.  
  7576. @Indent_List@<:#490,9360>    <:f,QCourier,>rr<:f>    A boolean expression with the return receipt requested flag (<+!>TRUE<-!> to request a return receipt, 
  7577. <+!>FALSE<-!> otherwise).
  7578.  
  7579. @Indent_List@<:#490,9360>    <:f,QCourier,>echo<:f>    A boolean expression with the echo flag (<+!>TRUE<-!> to echo the message, 
  7580. <+!>FALSE<-!> otherwise).
  7581.  
  7582. @Indent_List@<:#480,9360>    <:f,QCourier,>file<:f>    A string expression with the path and file name of the text file to use as the message text.
  7583.  
  7584. @Small_Header@<:#259,9360>Remarks
  7585.  
  7586. <:#960,9360>This statement will allow you to leave a message from any user (or any 'name' you wish to use) to any user on your system.  This can be useful if you want to notify a user of information that they should download in a QWK packet or that they might miss too 
  7587. easily as a quick one liner on screen from the PPL.
  7588.  
  7589. @Small_Header@<:#259,9360>Examples
  7590.  
  7591. @Example_Text@<:#484,9360>IF (CURSEC() << 20) THEN<**>  <+!>MESSAGE 0,U_NAME(),"SYSOP","REGISTER","R",DATE(),TRUE,FALSE,"REG.TXT"<-!><**>ENDIF
  7592.  
  7593. @Small_Header@<:#259,9360>See Also
  7594.  
  7595. <:#240,9360><-"><-"><-">
  7596.  
  7597. <:p<* >>
  7598.  
  7599. @Subhead@<:#360,9360>MGETBYTE() <+">  Function<-">
  7600.  
  7601. @Small_Header@<:#259,9360>Function
  7602.  
  7603. <:#240,9360>Get the next byte input from the modem.
  7604.  
  7605. @Small_Header@<:#259,9360>Syntax
  7606.  
  7607. <:#202,9360><:f,QCourier,>MGETBYTE<:f><:f,QCourier,>()<:f>
  7608.  
  7609. @Indent_List@<:#240,9360>    No arguments are required
  7610.  
  7611. @Small_Header@<:#259,9360>Return Type and Value
  7612.  
  7613. @Indent_List@<:#485,9360><+!>INTEGER<-!>    Returns the value (0-255) of the next byte from the modem input buffer or -1 if no bytes are pending.
  7614.  
  7615. @Small_Header@<:#259,9360>Remarks
  7616.  
  7617. <:#1205,9360>Any character may be received from the users modem.  Normally PCBoard will filter and convert strings (ESC sequences and DOORWAY codes) automatically.  However, sometimes this isn't desired and you need to access the incoming bytes directly.  This function 
  7618. will look directly for incoming characters from the modem and return them as a value from 0 to 255.  These numbers may be converted to characters with the 
  7619. <+!>CHR()<-!> function if necessary.
  7620.  
  7621. @Small_Header@<:#259,9360>Examples
  7622.  
  7623. @Example_Text@<:#800,9360>INTEGER byte<**>WHILE (byte <<<;> 27) DO<**>  LET byte = <+!>MGETBYTE()<-!><**>  PRINTLN "The byte value is ",byte<**>ENDWHILE
  7624.  
  7625. @Small_Header@<:#259,9360>See Also
  7626.  
  7627. <:#240,9360><-"><+!>INKEY() <+">Function<-!><-"><-"><+!><-">, <-!><+!>KINKEY() 
  7628. <+">Function<-!><-"><+!>, <-!><+!>MINKEY() <+">Function<-!><-"><-">
  7629.  
  7630. <:p<* >>
  7631.  
  7632. @Subhead@<:#360,9360>MID()   <+">Function<-">
  7633.  
  7634. @Small_Header@<:#259,9360>Function
  7635.  
  7636. <:#240,9360>Access any sub string of a string.
  7637.  
  7638. @Small_Header@<:#259,9360>Syntax
  7639.  
  7640. <:#202,9360><:f,QCourier,>MID<:f><:f,QCourier,>(str,pos,chars)<:f>
  7641.  
  7642. @Indent_List@<:#240,9360>    <:f,QCourier,>str<:f>    A string expression to take the left most characters of.
  7643.  
  7644. @Indent_List@<:#480,9360>    <:f,QCourier,>pos<:f>    An integer expression with the position within str to start taking the sub string from.
  7645.  
  7646. @Indent_List@<:#240,9360>    <:f,QCourier,>chars<:f>    An integer expression with the number of characters to take from str.
  7647.  
  7648. @Small_Header@<+@><:#259,9360>Return Type & Value
  7649.  
  7650. @Indent_List@<:#485,9360><+!>STRING<-!>    Returns a string with the specified number of characters from the specified position of str.
  7651.  
  7652. @Small_Header@<:#259,9360>Remarks
  7653.  
  7654. <:#1680,9360>This function will return a sub string with the specified number of characters and from the specified position of str.  This can be useful in data processing as well as text formatting.  The pos parameter may be less than 1 (the beginning of the str) and gr
  7655. eater than the length of str; if it is then spaces will be added to the beginning and/or ending as needed.  If chars is less than or equal to 0 then the returned string will be empty.  If chars is greater than the available length of str then the returned s
  7656. tring will have spaces added to the end(s) to pad it out to the full length specified.
  7657.  
  7658. @Small_Header@<:#259,9360>Examples
  7659.  
  7660. @Example_Text@<:#1610,9360>WHILE (RANDOM(250) <<<;> 0) PRINT <+!>MID(RANDOM(250),0,4)<-!>," "<**><**>STRING s<**>FOPEN 1,"DATA.TXT",O_RD,S_DN<**>WHILE (!FERR(1)) DO<**>  FGET 1,s<**>  PRINT LEFT(s,5),RTRIM(<+!>MID(s,5,20)<-!>," ")," - "<**>  PRINTLN RTRIM(<+!>MID(s,LEN(s)-25,60)<-!>,
  7661. " ")<**>ENDWHILE<**>FCLOSE 1
  7662.  
  7663. @Small_Header@<:#259,9360>See Also
  7664.  
  7665. <:#240,9360><-"><-"><-"><-"><-"><+!>LEFT() <+">Function<-">, RIGHT() <+">Function<-"><-!>
  7666.  
  7667. <:p<* >>
  7668.  
  7669. @Subhead@<:#360,9360>MIN()   <+">Function<-">
  7670.  
  7671. @Small_Header@<:#259,9360>Function
  7672.  
  7673. <:#240,9360>Extract the minute of the hour from a specified time of day.
  7674.  
  7675. @Small_Header@<:#259,9360>Syntax
  7676.  
  7677. <:#202,9360><:f,QCourier,>MIN(texp)<:f>
  7678.  
  7679. @Indent_List@<:#240,9360>    <:f,QCourier,>texp<:f>    Any time expression.
  7680.  
  7681. @Small_Header@<+@><:#259,9360>Return Type & Value
  7682.  
  7683. @Indent_List@<:#485,9360><+!>INTEGER<-!>    Returns the minute of the hour from the specified time expression (texp).  Valid return values are from 0 to 59.
  7684.  
  7685. @Small_Header@<:#259,9360>Remarks
  7686.  
  7687. <:#485,9360>This function allows you to extract a particular piece of information about a 
  7688. <+!>TIME<-!> value, in this case the minute of the hour of the time of day expression.
  7689.  
  7690. @Small_Header@<:#259,9360>Examples
  7691.  
  7692. @Example_Text@<:#168,9360>PRINTLN "The minute is ",<+!>MIN(TIME())<-!>
  7693.  
  7694. @Small_Header@<:#259,9360>See Also
  7695.  
  7696. <:#240,9360><+!>HOUR() <+">Function<-">, SEC() <+">Function<-"><-!><+!><-"><-"><-"><-">
  7697.  
  7698. <:p<* >>
  7699.  
  7700. @Subhead@<:#360,9360>MINKEY() <+">  Function<-">
  7701.  
  7702. @Small_Header@<:#259,9360>Function
  7703.  
  7704. <:#240,9360>Get the next key input from the modem only.
  7705.  
  7706. @Small_Header@<:#259,9360>Syntax
  7707.  
  7708. <:#202,9360><:f,QCourier,>MINKEY<:f><:f,QCourier,>()<:f>
  7709.  
  7710. @Indent_List@<:#240,9360>    No arguments are required
  7711.  
  7712. @Small_Header@<:#259,9360>Return Type and Value
  7713.  
  7714. @Indent_List@<:#485,9360><+!>STRING<-!>    Returns a single character for displayable characters or a string for cursor movement and function keys.
  7715.  
  7716. @Small_Header@<:#259,9360>Remarks
  7717.  
  7718. <:#720,9360>This function will return a single character long string for most key presses.  Additionally, it will return key names for function keys and cursor movement keys if it encounters ESC sequences or DOORWAY codes.  It will only return keystrokes from the remot
  7719. e users modem.
  7720.  
  7721. @Small_Header@<:#259,9360>Examples
  7722.  
  7723. @Example_Text@<:#1906,9360>STRING key<**>WHILE (key <<<;> CHR(27)) DO<**>  LET key = <+!>MINKEY()<-!><**>  IF (LEFT(key,5) = "SHIFT") THEN<**>    PRINTLN "It was a shifted key"<**>  ELSEIF (LEFT(key,4) = "CTRL") THEN<**>    PRINTLN "It was a control key"<**>  ELSEIF (LEFT(key,3) = "A
  7724. LT") THEN<**>    PRINTLN "It was an alternate key"<**>  ENDIF<**>  PRINTLN "The key was ",key<**>ENDWHILE
  7725.  
  7726. @Small_Header@<:#259,9360>See Also
  7727.  
  7728. <:#240,9360><-"><+!>INKEY() <+">Function<-!><-"><-"><+!><-">, <-!><+!>KINKEY() 
  7729. <+">Function<-!><-"><+!>, <-!><+!>MGETBYTE() <+">Function<-!><-"><-">
  7730.  
  7731. <:p<* >>
  7732.  
  7733. @Subhead@<:#360,9360>MINLEFT()   <+">Function<-">
  7734.  
  7735. @Small_Header@<:#259,9360>Function
  7736.  
  7737. <:#240,9360>Return the users minutes left.
  7738.  
  7739. @Small_Header@<:#259,9360>Syntax
  7740.  
  7741. <:#202,9360><:f,QCourier,>MINLEFT<:f><:f,QCourier,>()<:f>
  7742.  
  7743. @Indent_List@<:#240,9360>    No arguments are required
  7744.  
  7745. @Small_Header@<:#259,9360>Return Type and Value
  7746.  
  7747. @Indent_List@<:#245,9360><+!>INTEGER<-!>    Returns the number of minutes the user online has left to use.
  7748.  
  7749. @Small_Header@<:#259,9360>Remarks
  7750.  
  7751. <:#720,9360>This function will allow you to access how much time the user has remaining.  You could use it to disable certain features at a certain point in their session.  Note that this number can be either the minutes left today or this session if the SysOp does not
  7752.  enforce daily time limits.
  7753.  
  7754. @Small_Header@<:#259,9360>Examples
  7755.  
  7756. @Example_Text@<:#800,9360>IF (<+!>MINLEFT()<-!> <;> 10) THEN<**>  KBDSTUFF "D"+CHR(13)<**>ELSE<**>  PRINTLN "Sorry, not enough time left to download"<**>ENDIF
  7757.  
  7758. @Small_Header@<:#259,9360>See Also
  7759.  
  7760. <:#240,9360><-"><-"><+!>MINON() <+">Function<-!><-"><-"><-">
  7761.  
  7762. <:p<* >>
  7763.  
  7764. @Subhead@<:#360,9360>MINON()   <+">Function<-">
  7765.  
  7766. @Small_Header@<:#259,9360>Function
  7767.  
  7768. <:#240,9360>Return the users minutes online.
  7769.  
  7770. @Small_Header@<:#259,9360>Syntax
  7771.  
  7772. <:#202,9360><:f,QCourier,>MINON<:f><:f,QCourier,>()<:f>
  7773.  
  7774. @Indent_List@<:#240,9360>    No arguments are required
  7775.  
  7776. @Small_Header@<:#259,9360>Return Type and Value
  7777.  
  7778. @Indent_List@<:#245,9360><+!>INTEGER<-!>    Returns the number of minutes the user online has used this session.
  7779.  
  7780. @Small_Header@<:#259,9360>Remarks
  7781.  
  7782. <:#960,9360>This function will allow you to access how much time the user has used this session.  You could use it to allow or disallow certain features before a certain point in their session.  Note that this number will always be the minutes used this session regardl
  7783. ess of whether or not the SysOp enforces daily time limits.
  7784.  
  7785. @Small_Header@<:#259,9360>Examples
  7786.  
  7787. @Example_Text@<:#800,9360>IF (<+!>MINON()<-!> <;>= 10) THEN<**>  KBDSTUFF "D"+CHR(13)<**>ELSE<**>  PRINTLN "Sorry, you haven't been on long enough yet to download"<**>ENDIF
  7788.  
  7789. @Small_Header@<:#259,9360>See Also
  7790.  
  7791. <:#240,9360><-"><-"><+!>MINLEFT() <+">Function<-!><-"><-"><-">
  7792.  
  7793. <:p<* >>
  7794.  
  7795. @Subhead@<:#360,9360>MKADDR()   <+">Function<-">
  7796.  
  7797. @Small_Header@<:#259,9360>Function
  7798.  
  7799. <:#240,9360>Create a complete address from a segment and offset.
  7800.  
  7801. @Small_Header@<:#259,9360>Syntax
  7802.  
  7803. <:#202,9360><:f,QCourier,>MKADDR<:f><:f,QCourier,>(seg,off<:f><:f,QCourier,>)<:f>
  7804.  
  7805. @Indent_List@<:#240,9360>    <:f,QCourier,>seg<:f>    An integer expression with the segment portion of the address.
  7806.  
  7807. @Indent_List@<:#240,9360>    <:f,QCourier,>off<:f>    An integer expression with the offset portion of the address.
  7808.  
  7809. @Small_Header@<+@><:#259,9360>Return Type & Value
  7810.  
  7811. @Indent_List@<:#245,9360><+!>INTEGER<-!>    Returns an integer with the complete segment:offset based address.
  7812.  
  7813. @Small_Header@<:#259,9360>Remarks
  7814.  
  7815. <:#970,9360>The <+!>POKE...<-!> statements and <+!>PEEK...()<-!> functions require full addresses to read from and write to memory.  Normally you will know the segment and the offset portions of the address but they will be separate.  Although not difficult to integrat
  7816. e together, this function automates the process.  The values returned can be calculated by the following formula:  
  7817. <+!>seg*10000h+off<-!>.
  7818.  
  7819. @Small_Header@<:#259,9360>Examples
  7820.  
  7821. @Example_Text@<:#168,9360>PRINTLN "Ticks since midnight",PEEKDW(<+!>MKADDR(0040h,006Ch)<-!>)
  7822.  
  7823. @Small_Header@<:#259,9360>See Also
  7824.  
  7825. <:#240,9360><-"><-"><-"><-"><-"><+!>VARADDR <+">Statement<-">, <-!><+!>VAROFF 
  7826. <+">Statement<-">, VARSEG <+">Statement<-"><-!>
  7827.  
  7828. <:p<* >>
  7829.  
  7830. @Subhead@<:#360,9360>MKDATE()   <+">Function<-">
  7831.  
  7832. @Small_Header@<:#259,9360>Function
  7833.  
  7834. <:#240,9360>Create a complete date from separate year, month and day values.
  7835.  
  7836. @Small_Header@<:#259,9360>Syntax
  7837.  
  7838. <:#202,9360><:f,QCourier,>MKDATE<:f><:f,QCourier,>(year,month,day<:f><:f,QCourier,>)<:f>
  7839.  
  7840. @Indent_List@<:#240,9360>    <:f,QCourier,>year<:f>    An integer expression with the year (1900 through 2079).
  7841.  
  7842. @Indent_List@<:#240,9360>    <:f,QCourier,>month<:f>    An integer expression with the month (1 through 12).
  7843.  
  7844. @Indent_List@<:#240,9360>    <:f,QCourier,>day<:f>    An integer expression with the day of the month (1 through 31).
  7845.  
  7846. @Small_Header@<+@><:#259,9360>Return Type & Value
  7847.  
  7848. @Indent_List@<:#245,9360><+!>DATE<-!>    Returns a date made from the specified year, month and day values.
  7849.  
  7850. @Small_Header@<:#259,9360>Remarks
  7851.  
  7852. <:#1925,9360>Although PPL does it's best to automatically convert values from one type to another as needed, converting 
  7853. <+!>STRING<-!> values to <+!>DATE<-!> values presents a special problem because of the year portion of the date.  Normally the year is only expressed in a two digit format.  This limits the automatic convertion to a single 100 year period.  PCBoard uses yea
  7854. r values greater than or equal to 80 as 20th century (19XX) dates, and year values less than 80 as 21st century (20XX) dates.  Since you may need to access dates prior to 1980 (when processing birthdates, for example), this function allows you to take three
  7855.  integers (year, month and day) and build any date necessary.
  7856.  
  7857. @Small_Header@<:#259,9360>Examples
  7858.  
  7859. @Example_Text@<:#2094,9360>PRINTLN "My birthdate is ",<+!>MKDATE(1967,10,31)<-!><**>INTEGER y,m,d<**>INPUTINT " Your birth year",y,@X0E<**>INPUTINT "Your birth month",m,@X0E<**>INPUTINT "  Your birth day",d,@X0E<**>PRINTLN "Your birthdate is ",<+!>MKDATE(y,m,d)<-!><**>IF (<+!>MKDATE(
  7860. y,m,d)<-!> << <+!>MKDATE(1967,10,31)<-!>) THEN<**>  PRINTLN "You are older than me"<**>ELSE IF (<+!>MKDATE(y,m,d)<-!> <;> 
  7861. <+!>MKDATE(1967,10,31)<-!>) THEN<**>  PRINTLN "I am older than you"<**>ELSE<**>  PRINTLN "We are the same age"<**>ENDIF
  7862.  
  7863. @Small_Header@<:#259,9360>See Also
  7864.  
  7865. <:#240,9360><-"><-"><-"><-"><-"><+!>VARADDR <+">Statement<-">, <-!><+!>VAROFF 
  7866. <+">Statement<-">, VARSEG <+">Statement<-"><-!>
  7867.  
  7868. <:p<* >>
  7869.  
  7870. @Subhead@<:#360,9360>MODEM()   <+">Function<-">
  7871.  
  7872. @Small_Header@<:#259,9360>Function
  7873.  
  7874. <:#240,9360>Access the connect string as reported by the modem.
  7875.  
  7876. @Small_Header@<:#259,9360>Syntax
  7877.  
  7878. <:#202,9360><:f,QCourier,>MODEM<:f><:f,QCourier,>(<:f><:f,QCourier,>)<:f>
  7879.  
  7880. @Indent_List@<:#240,9360>    No arguments are required
  7881.  
  7882. @Small_Header@<:#259,9360>Return Type & Value
  7883.  
  7884. @Indent_List@<:#245,9360><+!>STRING<-!>    Returns the modem connect string.
  7885.  
  7886. @Small_Header@<:#259,9360>Remarks
  7887.  
  7888. <:#1200,9360>PCBoard expects and requires certain information to be reported by the modem anytime a user connects to the BBS.  The minimum requirement is a string with the word CONNECT; other information may be included, such as the connect speed, error correction, data
  7889.  compression, etc.  Should your PPL application have need of this information as well, it may be accessed with this function.
  7890.  
  7891. @Small_Header@<:#259,9360>Examples
  7892.  
  7893. @Example_Text@<+@><:#484,9360>FAPPEND 1,"MODEM.LOG",O_WR,S_DW<**>FPUTLN 1,LEFT(U_NAME(),30)+<+!>MODEM<-!><+!>()<-!><**>FCLOSE 1
  7894.  
  7895. @Small_Header@<:#259,9360>See Also
  7896.  
  7897. <:#240,9360><-"><-">
  7898.  
  7899. <:p<* >>
  7900.  
  7901. @Subhead@<:#360,9360>MONEY   <+">Type<-">
  7902.  
  7903. @Small_Header@<:#259,9360>Function
  7904.  
  7905. <:#240,9360>Declare one or more variables of type money.
  7906.  
  7907. @Small_Header@<:#259,9360>Syntax
  7908.  
  7909. <:#202,9360><:f200,QCourier,>MONEY var|arr(s<[>,s<[>,s]])<[>,var|arr(s<[>,s<[>,s]])]<:f>
  7910.  
  7911. @Indent_List@<:#720,9360>    <:f,QCourier,>var<:f>    The name of a variable to declare.  Must start with a letter <[>A-Z] which may be followed by letters, digits <[>0-9] or the underscore <[>_].  May be of any length but only the first 32 characters are used.
  7912.  
  7913. @Indent_List@<:#480,9360>    <:f,QCourier,>arr<:f>    The name of an array variable to declare.  The same naming conventions as var are used.
  7914.  
  7915. @Indent_List@<:#480,9360>    <:f,QCourier,>s<:f>    The size (0-based) of an array variable dimension.  Any constant integer expression is allowed.
  7916.  
  7917. @Small_Header@<:#259,9360>Remarks
  7918.  
  7919. <:#2430,9360><+!>MONEY<-!> variables are stored as positive or negative cents.  The range of 
  7920. <+!>MONEY<-!> is $-21,474,836.48 through $+21,474,836.47.  It is stored internally as a four byte signed long integer.  If 
  7921. <+!>MONEY<-!> is assigned to or from an <+!>INTEGER<-!> type then the cents (-2,147,483,648 - +2,147,483,647) are assigned.  If 
  7922. <+!>MONEY<-!> is assigned to a <+!>STRING<-!> type then it is automatically converted to the following format:  "$sD.CC", where s is the sign (- for negative amounts, nothing for positive amounts), D is the dollar amount (one or more digits as needed) and C
  7923. C is the cents amount (00-99).  If a <+!>STRING<-!></`>is assigned to 
  7924. <+!>MONEY<-!> then PPL will do it's best to convert the string back to the appropriate amount of money.  All other types, when assigned to or from 
  7925. <+!>MONEY<-!>, will be converted to an <+!>INTEGER<-!> first before being assigned to or from the 
  7926. <+!>MONEY<-!> type.
  7927.  
  7928. @Small_Header@<:#259,9360>Examples
  7929.  
  7930. @Example_Text@<:#158,9360><+!>MONEY itemAmt, subTot, total, priceList(2,17)<-!>
  7931.  
  7932. @Small_Header@<:#259,9360>See Also
  7933.  
  7934. <:#240,9360><+!>BOOLEAN <+">Type<-">, DATE <+">Type<-">, INTEGER <+">Type<-">, STRING 
  7935. <+">Type<-">, TIME <+">Type<-!><-">
  7936.  
  7937. <:p<* >>
  7938.  
  7939. @Subhead@<:#360,9360>MONTH()   <+">Function<-">
  7940.  
  7941. @Small_Header@<:#259,9360>Function
  7942.  
  7943. <:#240,9360>Extracts the month of the year from a specified date.
  7944.  
  7945. @Small_Header@<:#259,9360>Syntax
  7946.  
  7947. <:#202,9360><:f,QCourier,>MONTH(dexp)<:f>
  7948.  
  7949. @Indent_List@<:#240,9360>    <:f,QCourier,>dexp<:f>    Any date expression.
  7950.  
  7951. @Small_Header@<+@><:#259,9360>Return Type & Value
  7952.  
  7953. @Indent_List@<:#485,9360><+!>INTEGER<-!>    Returns the month from the specified date expression (dexp).  Valid return values are from 1 to 12.
  7954.  
  7955. @Small_Header@<:#259,9360>Remarks
  7956.  
  7957. <:#485,9360>This function allows you to extract a particular piece of information about a 
  7958. <+!>DATE<-!> value, in this case the month of the date.
  7959.  
  7960. @Small_Header@<:#259,9360>Examples
  7961.  
  7962. @Example_Text@<:#168,9360>PRINTLN "This month is:  ",<+!>MONTH(DATE())<-!>
  7963.  
  7964. @Small_Header@<:#259,9360>See Also
  7965.  
  7966. <:#240,9360><+!>DAY() <+">Function<-">, <-!><+!>DOW() <+">Function<-">, <-!><+!>YEAR<+!>() 
  7967. <+">Function<-"><-"><-"><-">
  7968.  
  7969. <:p<* >>
  7970.  
  7971. @Subhead@<+@><:#360,9360>MORE   <+">Statement<-">
  7972.  
  7973. @Small_Header@<:#259,9360>Function
  7974.  
  7975. <:#240,9360>Pause the display and ask the user how to continue.
  7976.  
  7977. @Small_Header@<:#259,9360>Syntax
  7978.  
  7979. <:#202,9360><:f,QCourier,>MORE<:f>
  7980.  
  7981. @Indent_List@<:#240,9360>    No arguments are required
  7982.  
  7983. @Small_Header@<:#259,9360>Remarks
  7984.  
  7985. <:#1440,9360>It is often necessary to pause in the display of information and wait for the user to catch up.  This statement allows you prompt the user on how to continue.  The acceptable responses are Y (or whatever letter is appropriate for the users language selectio
  7986. n) to continue, N (or, again, whatever letter is appropriate) to abort, or NS to continue in non-stop mode.  It displays prompt number 196 from the PCBTEXT file for the current language to let the user know what is expected.
  7987.  
  7988. @Small_Header@<:#259,9360>Examples
  7989.  
  7990. @Example_Text@<:#632,9360>PRINTLN "Your account has expired!"<**>PRINTLN "You are about to be logged off"<**><+!>MORE<-!><**>PRINTLN "Call me voice to renew your subscription"
  7991.  
  7992. @Small_Header@<:#259,9360>See Also
  7993.  
  7994. <:#240,9360><+!>WAIT <+">Statement<-"><-!>
  7995.  
  7996. <:p<* >>
  7997.  
  7998. @Subhead@<:#360,9360>MPRINT/MPRINTLN   <+">Statements<-">
  7999.  
  8000. @Small_Header@<:#259,9360>Function
  8001.  
  8002. <:#240,9360>Print (write) a line to the caller's screen (modem) only (with an optional newline appended)<*7><*7>.
  8003.  
  8004. @Small_Header@<:#259,9360>Syntax
  8005.  
  8006. <:#606,9360><:f,QCourier,>MPRINT<:f><:f,QCourier,> exp<[>,exp]<:f><:f,QCourier,><**>-or-<**>MPRINTLN<:f><:f,QCourier,> <[>exp<[>,exp]]<:f>
  8007.  
  8008. @Indent_List@<:#240,9360>    <:f,QCourier,>exp<:f>    An expression of any type to evaluate and write to the caller's screen.
  8009.  
  8010. @Small_Header@<:#259,9360>Remarks
  8011.  
  8012. <:#1455,9360>These statements will evalutate zero, one or more expressions of any type and write the results to the modem for the caller's display.  The 
  8013. <+!>MPRINTLN<-!> statement will append a newline to the end of the expressions; 
  8014. <+!>MPRINT<-!> will not.  Note that at least one expression must be specified for 
  8015. <+!>MPRINT<-!>, unlike the <+!>MPRINTLN<-!> statement which need not have any arguments passed to it.  These statements only send information to the modem and do not interpret @ codes; if the remote caller has ANSI then ANSI will be interpreted.
  8016.  
  8017. @Small_Header@<:#259,9360>Examples
  8018.  
  8019. @Example_Text@<:#948,9360><+!>MPRINT "The name of the currently running PPE file is "<**>MPRINTLN PPENAME(),"."<**>MPRINT "The path where it is located is "<**>MPRINTLN PPEPATH(),"."<**>MPRINT "The date is ",DATE()," and the time is ",TIME(),"."<**>MPRINTLN<-!>
  8020.  
  8021. @Small_Header@<:#259,9360>See Also
  8022.  
  8023. <:#240,9360><-"><-"><-"><-"><+!>PRINT/PRINTLN <+">Statements<-">, SPRINT/SPRINTLN 
  8024. <+">Statements<-"><-!><-">
  8025.  
  8026. <:p<* >>
  8027.  
  8028. @Subhead@<:#360,9360>NC   <+">Constant<-">
  8029.  
  8030. @Small_Header@<:#259,9360>Function
  8031.  
  8032. <:#240,9360>To re-start the display of information according to the current mode.
  8033.  
  8034. @Small_Header@<:#259,9360>Value
  8035.  
  8036. <:#240,9360>0 = 0b = 0o = 0h
  8037.  
  8038. @Small_Header@<:#259,9360>Remarks
  8039.  
  8040. <:#980,9360>The <+!>STARTDISP<-!> statement takes a single argument to start displaying information in a certain format.  
  8041. <+!>FCL<-!> tells PCBoard to count lines and pause as needed during the display of information.  
  8042. <+!>FNS<-!> tells PCBoard to not stop during the display of information.  
  8043. <+!>NC<-!> instructs PCBoard to start over with the last specified mode (<+!>FCL<-!> or 
  8044. <+!>FNS<-!>).
  8045.  
  8046. @Small_Header@<:#259,9360>Examples
  8047.  
  8048. @Example_Text@<:#1284,9360>INTEGER i,j<**>STARTDISP <+!>FCL<-!><**>FOR i = 1 TO 5<**>  STARTDISP 
  8049. <+!>NC<-!><**>  FOR j = 1 to 50<**>    PRINTLN "This is line ",j<**>  NEXT<**>NEXT
  8050.  
  8051. @Small_Header@<:#259,9360>See Also
  8052.  
  8053. <:#240,9360><-"><-"><-"><-"><+!>FCL <-!><+!><+">Constant<-!><-"><+!>, <-!><+!><-"><-"><-"><-">FNS 
  8054. <+">Constant<-"><-"><-"><-">
  8055.  
  8056. <:p<* >>
  8057.  
  8058. @Subhead@<:#360,9360>NEWLINE   <+">Constant<-">
  8059.  
  8060. @Small_Header@<:#259,9360>Function
  8061.  
  8062. <:#485,9360>Set the new line after prompt flag in an <+!>INPUTSTR<-!>, <+!>PROMPTSTR<-!>, or 
  8063. <+!>DISPTEXT<-!> statement.
  8064.  
  8065. @Small_Header@<:#259,9360>Value
  8066.  
  8067. <:#240,9360>64 = 1000000b = 100o = 40h
  8068.  
  8069. @Small_Header@<:#259,9360>Remarks
  8070.  
  8071. <:#730,9360>The <+!>INPUTSTR<-!>, <+!>PROMPTSTR<-!>, and <+!>DISPTEXT<-!> statements have the ability to send a carriage return/line feed after a prompt is displayed automatically and without the need to make a separate call to the 
  8072. <+!>NEWLINE<-!> statement.
  8073.  
  8074. @Small_Header@<:#259,9360>Examples
  8075.  
  8076. @Example_Text@<:#484,9360>STRING pwd<**>INPUTSTR "Enter id",pwd,@X0E,4,"0123456789",LFBEFORE+<+!>NEWLINE<-!>+LFAFTER<**>IF (pwd <<<;> "1234") PRINTLN "Bad id"
  8077.  
  8078. @Small_Header@<:#259,9360>See Also
  8079.  
  8080. <:#480,9360><-"><-"><-"><-"><+!>DISPTEXT<-!><+!> <+">Statement<-!><-"><+!><-">, INPUTSTR 
  8081. <+">Statement<-">, <-"><-">LFAFTER <+">Constant<-">, <-!><+!>LFBEFORE 
  8082. <+">Constant<-">, <-!><+!>PROMPTSTR <+">Statement<-"><-!><-"><-"><-"><-"><-"><-">
  8083.  
  8084. <:p<* >>
  8085.  
  8086. @Subhead@<+@><:#360,9360>NEWLINE   <+">Statement<-">
  8087.  
  8088. @Small_Header@<:#259,9360>Function
  8089.  
  8090. <:#240,9360>Move the cursor to the beginning of the next line.
  8091.  
  8092. @Small_Header@<:#259,9360>Syntax
  8093.  
  8094. <:#202,9360><:f,QCourier,>NEWLINE<:f>
  8095.  
  8096. @Indent_List@<:#240,9360>    No arguments are required
  8097.  
  8098. @Small_Header@<:#259,9360>Remarks
  8099.  
  8100. <:#725,9360>This statement should be used for moving to the beginning of the next line on screen, scrolling if necessary.  It will do so regardless of the current cursor position, unlike the 
  8101. <+!>FRESHLINE<-!> statement.
  8102.  
  8103. @Small_Header@<:#259,9360>Examples
  8104.  
  8105. @Example_Text@<:#1264,9360>INTEGER i, end<**>LET end = RANDOM(20)<**>FOR i = 1 TO end<**>  PRINT RIGHT(RANDOM(10000),8)<**>NEXT<**>FRESHLINE<+!><**>NEWLINE<-!><**>PRINTLN "Now we continue with a blank line between"
  8106.  
  8107. @Small_Header@<:#259,9360>See Also
  8108.  
  8109. <:#240,9360><-"><+!>FRESHLINE <+">Statement<-">, NEWLINES <+">Statement<-"><-!>
  8110.  
  8111. <:p<* >>
  8112.  
  8113. @Subhead@<+@><:#360,9360>NEWLINES   <+">Statement<-">
  8114.  
  8115. @Small_Header@<:#259,9360>Function
  8116.  
  8117. <:#245,9360>Execute a specified number of <+!>NEWLINE<-!> statements.
  8118.  
  8119. @Small_Header@<:#259,9360>Syntax
  8120.  
  8121. <:#202,9360><:f,QCourier,>NEWLINES count<:f>
  8122.  
  8123. @Indent_List@<:#245,9360>    <:f,QCourier,>count<:f>    An integer expression with the number of times to execute 
  8124. <+!>NEWLINE<-!>.
  8125.  
  8126. @Small_Header@<:#259,9360>Remarks
  8127.  
  8128. <:#975,9360>This statement is convienient when executing multiple and/or variable 
  8129. <+!>NEWLINE<-!> statements for screen formatting.  It takes a single integer expression argument and automatically executes that many 
  8130. <+!>NEWLINE<-!> statements for you without the need to set up a loop or to write multiple 
  8131. <+!>NEWLINE<-!> lines in your source code.
  8132.  
  8133. @Small_Header@<:#259,9360>Examples
  8134.  
  8135. @Example_Text@<:#1264,9360>INTEGER i, end<**>LET end = RANDOM(20)<**>FOR i = 1 TO end<**>  PRINT RIGHT(RANDOM(10000),8)<**>NEXT<**>FRESHLINE<+!><**>NEWLINE 5<-!><**>PRINTLN "Now we continue with a 5 blank lines between"
  8136.  
  8137. @Small_Header@<:#259,9360>See Also
  8138.  
  8139. <:#240,9360><-"><+!>FRESHLINE <+">Statement<-">, NEWLINE <+">Statement<-"><-!>
  8140.  
  8141. <:p<* >>
  8142.  
  8143. @Subhead@<+@><:#360,9360>NEWPWD   <+">Statement<-">
  8144.  
  8145. @Small_Header@<:#259,9360>Function
  8146.  
  8147. <:#240,9360>Change the users password and maintain the password PSA if installed.
  8148.  
  8149. @Small_Header@<:#259,9360>Syntax
  8150.  
  8151. <:#202,9360><:f,QCourier,>NEWPWD pwd,var<:f>
  8152.  
  8153. @Indent_List@<:#240,9360>    <:f,QCourier,>pwd<:f>    A string expression with the new password for the user.
  8154.  
  8155. @Indent_List@<:#490,9360>    <:f,QCourier,>var<:f>    A variable to hold the password change status; 
  8156. <+!>TRUE<-!> if the password was changed or <+!>FALSE<-!> otherwise.
  8157.  
  8158. @Small_Header@<:#259,9360>Remarks
  8159.  
  8160. <:#2180,9360>There are two ways to change the users password under PPL control.  The first is to simply use the 
  8161. <+!>GETUSER<-!> statement, assign the new password to the <+!>U_PWD<-!> variable, then issue the 
  8162. <+!>PUTUSER<-!> statement.  However, this isn't adequate if the SysOp has installed the password PSA.  This statement will take care of validating the password, checking it against the password history, updating the password history, setting a new expiratio
  8163. n date if necessary and incrementing the times changed counter.  If the password fails a validity test then this statement will set the var parameter to 
  8164. <+!>FALSE<-!> to let you know that the password wasn't changed.  If the password PSA isn't installed or if the password conforms to the PSA requirements, then var will be set to 
  8165. <+!>TRUE<-!>.
  8166.  
  8167. @Small_Header@<:#259,9360>Examples
  8168.  
  8169. @Example_Text@<:#948,9360>BOOLEAN changed<**>STRING  pwd<**>INPUTSTR "Enter a new password",pwd,@X0E,12,MASK_PWD(),ECHODOTS<**>NEWLINE<+!><**>NEWPWD pwd,changed<-!><**>IF (!changed) PRINTLN "Password not changed"
  8170.  
  8171. @Small_Header@<:#259,9360>See Also
  8172.  
  8173. <:#240,9360><-">
  8174.  
  8175. <:p<* >>
  8176.  
  8177. @Subhead@<:#360,9360>NOCHAR()   <+">Function<-">
  8178.  
  8179. @Small_Header@<:#259,9360>Function
  8180.  
  8181. <:#240,9360>Get the no response character for the current language.
  8182.  
  8183. @Small_Header@<:#259,9360>Syntax
  8184.  
  8185. <:#202,9360><:f,QCourier,>NOCHAR<:f><:f,QCourier,>(<:f><:f,QCourier,>)<:f>
  8186.  
  8187. @Indent_List@<:#240,9360>    No arguments are required
  8188.  
  8189. @Small_Header@<:#259,9360>Return Type & Value
  8190.  
  8191. @Indent_List@<:#245,9360><+!>STRING<-!>    Returns the no character for the current language.
  8192.  
  8193. @Small_Header@<:#259,9360>Remarks
  8194.  
  8195. <:#480,9360>Support for foreign language yes/no responses can be easily added by using this function to determine what a negative response should be instead of hardcoding the english "N" character.
  8196.  
  8197. @Small_Header@<:#259,9360>Examples
  8198.  
  8199. @Example_Text@<:#642,9360>STRING ans<**>LET ans = YESCHAR()<**>INPUTSTR "Run program now",ans,@X0E,1,"",AUTO+YESNO<**>IF (ans = 
  8200. <+!>NOCHAR()<-!>) END
  8201.  
  8202. @Small_Header@<:#259,9360>See Also
  8203.  
  8204. <:#240,9360><-"><-"><+!>YESCHAR() <+">Function<-">, YESNO <+">Constant<-"><-!>
  8205.  
  8206. <:p<* >>
  8207.  
  8208. @Subhead@<:#360,9360>NOCLEAR   <+">Constant<-">
  8209.  
  8210. @Small_Header@<:#259,9360>Function
  8211.  
  8212. <:#245,9360>Set the no clear input field flag in an <+!>INPUTSTR<-!> or <+!>PROMPTSTR<-!> statement.
  8213.  
  8214. @Small_Header@<:#259,9360>Value
  8215.  
  8216. <:#240,9360>1024 = 10000000000b = 2000o = 400h
  8217.  
  8218. @Small_Header@<:#259,9360>Remarks
  8219.  
  8220. <+C><:#965,9360>The <+!>INPUTSTR<-!> and <+!>PROMPTSTR<-!> statements have the ability to automatically clear the default value from the input field when the users presses his first key if ANSI is available.  This is the default mode of operations.  If you don't want this 
  8221. to happen, you may use this flag to disable this feature.
  8222.  
  8223. @Small_Header@<:#259,9360>Examples
  8224.  
  8225. @Example_Text@<:#1116,9360>STRING cmds<**>LET cmds = "QUIT"<**>INPUTSTR "Commands",cmds,@X0E,60,MASK_ASCII(),STACKED+<+!>NOCLEAR<-!><**>TOKENIZE cmds<**>LET cmds = GETTOKEN()<**>IF (cmds = "QUIT") END<**>KBDSTUFF cmds+TOKENSTR()
  8226.  
  8227. @Small_Header@<:#259,9360>See Also
  8228.  
  8229. <:#240,9360><-"><-"><-"><-"><+!>INPUTSTR <+">Statement<-">, <-!><-"><-"><+!>PROMPTSTR 
  8230. <+">Statement<-"><-!><-"><-"><-"><-"><-">
  8231.  
  8232. <:p<* >>
  8233.  
  8234. @Subhead@<:#360,9360>NOT()   <+">Function<-">
  8235.  
  8236. @Small_Header@<:#259,9360>Function
  8237.  
  8238. <:#240,9360>Calculate the bitwise NOT of an integer argument.
  8239.  
  8240. @Small_Header@<:#259,9360>Syntax
  8241.  
  8242. <:#202,9360><:f,QCourier,>NOT(iexp)<:f>
  8243.  
  8244. @Indent_List@<:#240,9360>    <:f,QCourier,>iexp<:f>    Any integer expression.
  8245.  
  8246. @Small_Header@<+@><:#259,9360>Return Type & Value
  8247.  
  8248. @Indent_List@<:#245,9360><+!>INTEGER<-!>    Returns the bitwise NOT of iexp.
  8249.  
  8250. @Small_Header@<:#259,9360>Remarks
  8251.  
  8252. <:#480,9360>This function may be used to toggle all bits in an integer expression.  Wherever a bit had been set it will be clear after this function call, and vice versa.
  8253.  
  8254. @Small_Header@<:#259,9360>Examples
  8255.  
  8256. @Example_Text@<:#810,9360>' Toggle the bits<**>PRINTLN <+!>NOT(1248h)<-!><**>' Toggle all flag<**>INTEGER flag<**>LET flag = 
  8257. <+!>NOT(flag)<-!>
  8258.  
  8259. @Small_Header@<:#259,9360>See Also
  8260.  
  8261. <:#240,9360><+!>AND() <+">Function<-">, <-!><+!>OR() <+">Function<-">, <-!><+!>XOR() 
  8262. <+">Function<-"><-!><-"><-"><-">
  8263.  
  8264. <:p<* >>
  8265.  
  8266. @Subhead@<:#360,9360>ONLOCAL()   <+">Function<-">
  8267.  
  8268. @Small_Header@<:#259,9360>Function
  8269.  
  8270. <:#240,9360>Determine whether or not a caller is on locally.
  8271.  
  8272. @Small_Header@<:#259,9360>Syntax
  8273.  
  8274. <:#202,9360><:f,QCourier,>ONLOCAL<:f><:f,QCourier,>(<:f><:f,QCourier,>)<:f>
  8275.  
  8276. @Indent_List@<:#240,9360>    No arguments are required
  8277.  
  8278. @Small_Header@<:#259,9360>Return Type & Value
  8279.  
  8280. @Indent_List@<:#245,9360><+!>BOOLEAN<-!>    Returns <+!>TRUE<-!> if the caller is on locally, 
  8281. <+!>FALSE<-!> otherwise.
  8282.  
  8283. @Small_Header@<:#259,9360>Remarks
  8284.  
  8285. <:#720,9360>There are some features that work differently for local and remote callers, such as file transfers and modem communications.  This function will report to you whether or not a user is logged on locally and allow you to handle local processing differently th
  8286. an remote processing.
  8287.  
  8288. @Small_Header@<:#259,9360>Examples
  8289.  
  8290. @Example_Text@<:#958,9360>IF (<+!>ONLOCAL()<-!>) THEN<**>  PRINTLN "Call back verification cannot be performed for"<**>  PRINTLN "users logged in locally!"<**>  END<**>ENDIF<**>CALL "CALLBACK.PPE"
  8291.  
  8292. @Small_Header@<:#259,9360>See Also
  8293.  
  8294. <:#240,9360><-"><-"><-">
  8295.  
  8296. <:p<* >>
  8297.  
  8298. @Subhead@<+@><:#360,9360>OPENCAP   <+">Statement<-">
  8299.  
  8300. @Small_Header@<:#259,9360>Function
  8301.  
  8302. <:#240,9360>Open the screen capture file.
  8303.  
  8304. @Small_Header@<:#259,9360>Syntax
  8305.  
  8306. <:#202,9360><:f,QCourier,>OPENCAP file,stat<:f>
  8307.  
  8308. @Indent_List@<:#240,9360>    <:f,QCourier,>file<:f>    A string expression with the filename to open.
  8309.  
  8310. @Indent_List@<:#485,9360>    <:f,QCourier,>stat<:f>    A variable to hold the return status (<+!>TRUE<-!> if error opening file, 
  8311. <+!>FALSE<-!> otherwise).
  8312.  
  8313. @Small_Header@<:#259,9360>Remarks
  8314.  
  8315. <:#2185,9360>PCBoard has the ability to capture screen output to a file for later reference.  PPL allows that same ability via the 
  8316. <+!>OPENCAP<-!> and <+!>CLOSECAP<-!> statements.  This could be useful in a program that executes a series of commands in non-stop mode.  The process could open a capture file first, execute the commands, close the capture file, then allow the user to view 
  8317. or download the capture file.  <+!>CLOSECAP<-!> closes the capture file and turns off screen capturing.  Also, the 
  8318. <+!>SHOWON<-!> and <+!>SHOWOFF<-!> statements can be used to turn on and off showing information to the screen while allowing that same information (even if not displayed or transmitted via modem) to be captured to a file.  The 
  8319. <+!>SHOWSTAT()<-!> function can be used to check the current status of the 
  8320. <+!>SHOWON<-!> and <+!>SHOWOFF<-!></`>statements.
  8321.  
  8322. @Small_Header@<:#259,9360>Examples
  8323.  
  8324. @Example_Text@<:#2212,9360>BOOLEAN ss<**>LET ss = SHOWSTAT()<**>SHOWOFF<+!><**>OPENCAP "CAP"+STRING(PCBNODE()),ocFlag<-!><**>IF (ocFlag) THEN<**>  DIR "U;NS"<**>  CLOSECAP<**>  KBDSTUFF "FLAG CAP"+STRING(PCBNODE())+CHR(13)<**>ENDIF<**>IF (ss) THEN<**>  SHOWON<**>ELSE<**>  SHOWOFF<**>
  8325. ENDIF
  8326.  
  8327. @Small_Header@<:#259,9360>See Also
  8328.  
  8329. <:#476,9360><+!>CLOSECAP <+">Statement<-"><-!><-"><+!>, SHOWOFF <+">Statement<-">, SHOWON 
  8330. <+">Statement<-">, SHOWSTAT() <+">Function<-"><-!>
  8331.  
  8332. <:p<* >>
  8333.  
  8334. @Subhead@<+@><:#360,9360>OPTEXT   <+">Statement<-">
  8335.  
  8336. @Small_Header@<:#259,9360>Function
  8337.  
  8338. <:#240,9360>Set the text to be used by the @OPTEXT@ macro.
  8339.  
  8340. @Small_Header@<:#259,9360>Syntax
  8341.  
  8342. <:#202,9360><:f,QCourier,>OPTEXT<:f><:f,QCourier,> str<:f>
  8343.  
  8344. @Indent_List@<:#240,9360>    <:f,QCourier,>str<:f>    Any string expression.
  8345.  
  8346. @Small_Header@<:#259,9360>Remarks
  8347.  
  8348. <:#960,9360>The @OPTEXT@ macro is used to include operation specific text in prompts and display files.  Normally PCBoard automatically fills it in with the appropriate value.  However, you can use it for your own purposes by issuing this statement to set the text and 
  8349. immediately displaying the information that should use it (by either printing a line or displaying a file).
  8350.  
  8351. @Small_Header@<:#259,9360>Examples
  8352.  
  8353. @Example_Text@<:#474,9360><+!>OPTEXT STRING(DATE())+" & "+STRING(TIME())<-!><**>PRINTLN "The date and time are @OPTEXT@"<**>DISPFILE "FILE",GRAPH+SEC+LANG
  8354.  
  8355. @Small_Header@<:#259,9360>See Also
  8356.  
  8357. <:#240,9360><-">
  8358.  
  8359. <:p<* >>
  8360.  
  8361. @Subhead@<:#360,9360>OR()   <+">Function<-">
  8362.  
  8363. @Small_Header@<:#259,9360>Function
  8364.  
  8365. <:#240,9360>Calculate the bitwise OR of two integer arguments.
  8366.  
  8367. @Small_Header@<:#259,9360>Syntax
  8368.  
  8369. <:#202,9360><:f,QCourier,>OR(iexp1,iexp2)<:f>
  8370.  
  8371. @Indent_List@<:#240,9360>    <:f,QCourier,>iexp1<:f>    Any integer expression.
  8372.  
  8373. @Indent_List@<:#240,9360>    <:f,QCourier,>iexp2<:f>    Any integer expression.
  8374.  
  8375. @Small_Header@<+@><:#259,9360>Return Type & Value
  8376.  
  8377. @Indent_List@<:#245,9360><+!>INTEGER<-!>    Returns the bitwise OR of iexp1 and iexp2.
  8378.  
  8379. @Small_Header@<:#259,9360>Remarks
  8380.  
  8381. <:#480,9360>This function may be used to set selected bits in an integer expression by ORing the expression with a mask that has the bits to set set to 1 and the bits to ignore set to 0.
  8382.  
  8383. @Small_Header@<:#259,9360>Examples
  8384.  
  8385. @Example_Text@<:#810,9360>' Set the bits in the low byte<**>PRINTLN <+!>OR(1248h,00FFh)<-!><**>' Randomly set a flag the hard way<**>INTEGER flag<**>LET flag = 
  8386. <+!>OR(RANDOM(1),RANDOM(1))<-!>
  8387.  
  8388. @Small_Header@<:#259,9360>See Also
  8389.  
  8390. <:#240,9360><+!>AND() <+">Function<-">, <-!><+!>NOT() <+">Function<-">, <-!><+!>XOR() 
  8391. <+">Function<-"><-!><-"><-"><-">
  8392.  
  8393. <:p<* >>
  8394.  
  8395. @Subhead@<:#360,9360>O_RD   <+">Constant<-">
  8396.  
  8397. @Small_Header@<:#259,9360>Function
  8398.  
  8399. <:#245,9360>Set the open for read access flag in a <+!>FCREATE<-!>/<+!>FOPEN<-!>/<+!>FAPPEND<-!> statement.
  8400.  
  8401. @Small_Header@<:#259,9360>Value
  8402.  
  8403. <:#240,9360>0 = 0b = 0o = 0h
  8404.  
  8405. @Small_Header@<:#259,9360>Remarks
  8406.  
  8407. <:#960,9360>Files may be opened for read, write or combined read/write access.  You should only use the access you need to allow other processes to open files at the same time in multitasking and networked environments.  This constant will allow your PPE to read from a
  8408.  file without writing any information out to it.
  8409.  
  8410. @Small_Header@<:#259,9360>Examples
  8411.  
  8412. @Example_Text@<:#958,9360>FOPEN 1,"FILE.DAT",<+!>O_RD<-!>,S_DN ' Open for read access<**>FOR i = 1 TO 10<**>  FGET 1,s<**>  PRINTLN s<**>NEXT<**>FCLOSE 1
  8413.  
  8414. @Small_Header@<:#259,9360>See Also
  8415.  
  8416. <:#240,9360><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><+!>O_RW <+">Constant<-">, O_WR 
  8417. <+">Constant<-!><-">
  8418.  
  8419. <:p<* >>
  8420.  
  8421. @Subhead@<:#360,9360>O_RW   <+">Constant<-">
  8422.  
  8423. @Small_Header@<:#259,9360>Function
  8424.  
  8425. <:#245,9360>Set the open for read and write access flag in a <+!>FCREATE<-!>/<+!>FOPEN<-!>/<+!>FAPPEND<-!> statement.
  8426.  
  8427. @Small_Header@<:#259,9360>Value
  8428.  
  8429. <:#240,9360>2 = 10b = 2o = 2h
  8430.  
  8431. @Small_Header@<:#259,9360>Remarks
  8432.  
  8433. <:#960,9360>Files may be opened for read, write or combined read/write access.  You should only use the access you need to allow other processes to open files at the same time in multitasking and networked environments.  This constant will allow your PPE to both read f
  8434. rom and write to a file without the need to close and reopen it between accesses.
  8435.  
  8436. @Small_Header@<:#259,9360>Examples
  8437.  
  8438. @Example_Text@<:#1116,9360>FOPEN 1,"FILE.DAT",<+!>O_RW<-!>,S_DN ' Open for read and write access<**>FOR i = 1 TO 10<**>  FPUT 1,"X"<**>  FGET 1,s<**>  PRINTLN s<**>NEXT<**>FCLOSE 1
  8439.  
  8440. @Small_Header@<:#259,9360>See Also
  8441.  
  8442. <:#240,9360><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><+!>O_RD <+">Constant<-">, O_WR 
  8443. <+">Constant<-!><-">
  8444.  
  8445. <:p<* >>
  8446.  
  8447. @Subhead@<:#360,9360>O_WR   <+">Constant<-">
  8448.  
  8449. @Small_Header@<:#259,9360>Function
  8450.  
  8451. <:#245,9360>Set the open for write access flag in a <+!>FCREATE<-!>/<+!>FOPEN<-!>/<+!>FAPPEND<-!> statement.
  8452.  
  8453. @Small_Header@<:#259,9360>Value
  8454.  
  8455. <:#240,9360>1 = 1b = 1o = 1h
  8456.  
  8457. @Small_Header@<:#259,9360>Remarks
  8458.  
  8459. <:#960,9360>Files may be opened for read, write or combined read/write access.  You should only use the access you need to allow other processes to open files at the same time in multitasking and networked environments.  This constant will allow your PPE to write to a 
  8460. file but will restrict read access.
  8461.  
  8462. @Small_Header@<:#259,9360>Examples
  8463.  
  8464. @Example_Text@<:#800,9360>FOPEN 1,"FILE.DAT",<+!>O_WR<-!>,S_DN ' Open for write access<**>FOR i = 1 TO 10<**>  FPUTLN 1,"Line ",i<**>NEXT<**>FCLOSE 1
  8465.  
  8466. @Small_Header@<:#259,9360>See Also
  8467.  
  8468. <:#240,9360><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><+!>O_RD <+">Constant<-">, O_RW 
  8469. <+">Constant<-!><-">
  8470.  
  8471. <:p<* >>
  8472.  
  8473. @Subhead@<+@><:#360,9360>PAGEOFF   <+">Statement<-">
  8474.  
  8475. @Small_Header@<:#259,9360>Function
  8476.  
  8477. <:#240,9360>Turn off the SysOp paged indicator.
  8478.  
  8479. @Small_Header@<:#259,9360>Syntax
  8480.  
  8481. <:#202,9360><:f,QCourier,>PAGEOFF<:f>
  8482.  
  8483. @Indent_List@<:#240,9360>    No arguments are required
  8484.  
  8485. @Small_Header@<:#259,9360>Remarks
  8486.  
  8487. <:#1205,9360>One of the features of PCBoard where change is often requested is the operator page facility.  Some people want to be able to configure multiple ranges of availability per day, some want a different sounding page bell, longer or shorter page attempts, etc, 
  8488. etc.  This statement, along with the <+!>CHAT<-!> and <+!>PAGEON<-!> statements and the 
  8489. <+!>PAGESTAT()<-!> function, allow you to implement an operator page in any way desired.
  8490.  
  8491. @Small_Header@<:#259,9360>Examples
  8492.  
  8493. @Example_Text@<:#1748,9360>PAGEON<**>FOR i = 1 TO 10<**>  PRINT "@BEEP@"<**>  DELAY 18<**>  IF (KINKEY() = " ") THEN<**>    
  8494. <+!>PAGEOFF<-!><**>    SHELL TRUE,i,"SUPERCHT",""<**>    GOTO exit<**>  ENDIF<**>NEXT<**>:exit
  8495.  
  8496. @Small_Header@<:#259,9360>See Also
  8497.  
  8498. <:#240,9360><+!>CHAT <+">Statement<-!><-"><+!>, <-!><+!>PAGEON <+">Statement<-!><-"><+!>, PAGESTAT() 
  8499. <+">Function<-"><-!><+!><-"><-">
  8500.  
  8501. <:p<* >>
  8502.  
  8503. @Subhead@<+@><:#360,9360>PAGEON   <+">Statement<-">
  8504.  
  8505. @Small_Header@<:#259,9360>Function
  8506.  
  8507. <:#240,9360>Turn on the SysOp paged indicator and update user statistics.
  8508.  
  8509. @Small_Header@<:#259,9360>Syntax
  8510.  
  8511. <:#202,9360><:f,QCourier,>PAGEON<:f>
  8512.  
  8513. @Indent_List@<:#240,9360>    No arguments are required
  8514.  
  8515. @Small_Header@<:#259,9360>Remarks
  8516.  
  8517. <:#1445,9360>One of the features of PCBoard where change is often requested is the operator page facility.  Some people want to be able to configure multiple ranges of availability per day, some want a different sounding page bell, longer or shorter page attempts, etc, 
  8518. etc.  This statement, along with the <+!>CHAT<-!> and <+!>PAGEOFF<-!> statements and the 
  8519. <+!>PAGESTAT()<-!> function, allow you to implement an operator page in any way desired.  Note that this statement will also update the current callers statistics PSA if it is installed.
  8520.  
  8521. @Small_Header@<:#259,9360>Examples
  8522.  
  8523. @Example_Text@<:#1580,9360><+!>PAGEON<-!><**>FOR i = 1 TO 10<**>  PRINT "@BEEP@"<**>  DELAY 18<**>  IF (KINKEY() = " ") THEN<**>    CHAT<**>    GOTO exit<**>  ENDIF<**>NEXT<**>:exit
  8524.  
  8525. @Small_Header@<:#259,9360>See Also
  8526.  
  8527. <:#240,9360><+!>CHAT <+">Statement<-!><-"><+!>, <-!><+!>PAGEOFF <+">Statement<-!><-"><+!>, PAGESTAT() 
  8528. <+">Function<-"><-!><+!><-"><-">
  8529.  
  8530. <:p<* >>
  8531.  
  8532. @Subhead@<:#360,9360>PAGESTAT() <+">  Function<-">
  8533.  
  8534. @Small_Header@<:#259,9360>Function
  8535.  
  8536. <:#240,9360>Determine if the current user has paged the SysOp.
  8537.  
  8538. @Small_Header@<:#259,9360>Syntax
  8539.  
  8540. <:#202,9360><:f,QCourier,>PAGESTAT<:f><:f,QCourier,>()<:f>
  8541.  
  8542. @Indent_List@<:#240,9360>    No arguments are required
  8543.  
  8544. @Small_Header@<:#259,9360>Return Type and Value
  8545.  
  8546. @Indent_List@<:#245,9360><+!>BOOLEAN<-!>    Returns <+!>TRUE<-!> if the user has paged the SysOp, 
  8547. <+!>FALSE<-!> otherwise.
  8548.  
  8549. @Small_Header@<:#259,9360>Remarks
  8550.  
  8551. <:#1205,9360>One of the features of PCBoard where change is often requested is the operator page facility.  Some people want to be able to configure multiple ranges of availability per day, some want a different sounding page bell, longer or shorter page attempts, etc, 
  8552. etc.  This function, along with the <+!>CHAT<-!>, <+!>PAGEON<-!> and 
  8553. <+!>PAGEOFF<-!> statements, allow you to implement an operator page in any way desired.
  8554.  
  8555. @Small_Header@<:#259,9360>Examples
  8556.  
  8557. @Example_Text@<:#1116,9360>IF (<+!>PAGESTAT()<-!>) THEN<**>  PRINTLN "You have already paged the SysOp,"<**>  PRINTLN "please be patient."<**>ELSE<**>  PAGEON<**>  PRINTLN "The SysOp has been paged, continue"<**>ENDIF
  8558.  
  8559. @Small_Header@<:#259,9360>See Also
  8560.  
  8561. <:#240,9360><-"><-"><+!>CHAT <+">Statement<-">, PAGEOFF <+">Statement<-">, PAGEON 
  8562. <+">Statement<-"><-!>
  8563.  
  8564. <:p<* >>
  8565.  
  8566. @Subhead@<:#360,9360>PCBDAT()   <+">Function<-">
  8567.  
  8568. @Small_Header@<:#259,9360>Function
  8569.  
  8570. <:#240,9360>Return the path and file name of the PCBOARD.DAT file.
  8571.  
  8572. @Small_Header@<:#259,9360>Syntax
  8573.  
  8574. <:#202,9360><:f,QCourier,>PCBDAT<:f><:f,QCourier,>(<:f><:f,QCourier,>)<:f>
  8575.  
  8576. @Indent_List@<:#240,9360>    No arguments are required
  8577.  
  8578. @Small_Header@<:#259,9360>Return Type & Value
  8579.  
  8580. @Indent_List@<:#485,9360><+!>STRING<-!>    Returns the path and file name of the PCBOARD.DAT file for the currnet node.
  8581.  
  8582. @Small_Header@<:#259,9360>Remarks
  8583.  
  8584. <:#965,9360>The PCBOARD.DAT file is the master confiuration file for each node running PCBoard.  As such, there are many useful pieces of information that can be obtained from it.  It is a standard text file with one piece of information per line.  You may use the 
  8585. <+!>READLINE()<-!> function to read individual pieces of information from it.
  8586.  
  8587. @Small_Header@<:#259,9360>Examples
  8588.  
  8589. @Example_Text@<:#484,9360>STRING s<**>LET s = READLINE(<+!>PCBDAT()<-!>,1)<**>PRINTLN "PCBOARD.DAT version info - ",s
  8590.  
  8591. @Small_Header@<:#259,9360>See Also
  8592.  
  8593. <:#240,9360><-"><-"><-">
  8594.  
  8595. <:p<* >>
  8596.  
  8597. @Subhead@<:#360,9360>PCBNODE()   <+">Function<-">
  8598.  
  8599. @Small_Header@<:#259,9360>Function
  8600.  
  8601. <:#240,9360>Return the current node number.
  8602.  
  8603. @Small_Header@<:#259,9360>Syntax
  8604.  
  8605. <:#202,9360><:f,QCourier,>PCBNODE<:f><:f,QCourier,>(<:f><:f,QCourier,>)<:f>
  8606.  
  8607. @Indent_List@<:#240,9360>    No arguments are required
  8608.  
  8609. @Small_Header@<:#259,9360>Return Type & Value
  8610.  
  8611. @Indent_List@<:#245,9360><+!>INTEGER<-!>    Returns the node number for the current node.
  8612.  
  8613. @Small_Header@<:#259,9360>Remarks
  8614.  
  8615. <:#1200,9360>You may have need to know what node is in use for certain applications (for example, to create temporary files with unique names or to restrict features to a particular node or nodes).  This function will return a number from 1 to the maximum number of node
  8616. s allowed with a given copy of PCBoard.  Note that the node number may not be what is defined in PCBOARD.DAT if the /FLOAT or /NODE switches are used.
  8617.  
  8618. @Small_Header@<:#259,9360>Examples
  8619.  
  8620. @Example_Text@<:#484,9360>STRING file<**>LET file = "TMP"+STRING(<+!>PCBNODE()<-!>)+".$$$"<**>DELETE file
  8621.  
  8622. @Small_Header@<:#259,9360>See Also
  8623.  
  8624. <:#240,9360><-"><-"><-">
  8625.  
  8626. <:p<* >>
  8627.  
  8628. @Subhead@<:#360,9360>PEEKB()   <+">Function<-">
  8629.  
  8630. @Small_Header@<:#259,9360>Function
  8631.  
  8632. <:#240,9360>Return the value of a byte at a specified memory address.
  8633.  
  8634. @Small_Header@<:#259,9360>Syntax
  8635.  
  8636. <:#202,9360><:f,QCourier,>PEEKB(addr)<:f>
  8637.  
  8638. @Indent_List@<:#240,9360>    <:f,QCourier,>addr<:f>    An integer expression with the address of the byte to peek.
  8639.  
  8640. @Small_Header@<+@><:#259,9360>Return Type & Value
  8641.  
  8642. @Indent_List@<:#245,9360><+!>INTEGER<-!>    Returns the value of the byte at addr.
  8643.  
  8644. @Small_Header@<:#259,9360>Remarks
  8645.  
  8646. <:#720,9360>It is sometimes necessary to read values from memory directly (for example, from the system BIOS data segment).  This function will return a byte quantity (0-255) from a specified memory address.
  8647.  
  8648. @Small_Header@<:#259,9360>Examples
  8649.  
  8650. @Example_Text@<:#168,9360>PRINTLN "The current video mode is ",<+!>PEEKB(MKADDR(40h,49h))<-!>
  8651.  
  8652. @Small_Header@<:#259,9360>See Also
  8653.  
  8654. <:#720,9360><+!>MKADDR() <+">Function<-">, PEEKDW<-!><+!>() <+">Function<-">, 
  8655. <-!><+!>PEEKW() <+">Function<-!><-"><+!>, <-!><+!>POKEB<-!><+!>() 
  8656. <+">Function<-">, <-!><+!>POKEDW<-!><+!>() <+">Function<-">, <-!><+!>POKEW() 
  8657. <+">Function<-!><-"><+!>, <-!><+!>VARADDR <+">Statement<-">, VAROFF 
  8658. <+">Statement<-">, VARSEG <+">Statement<-"><-!><-"><-"><-"><-"><-">
  8659.  
  8660. <:p<* >>
  8661.  
  8662. @Subhead@<:#360,9360>PEEKDW()   <+">Function<-">
  8663.  
  8664. @Small_Header@<:#259,9360>Function
  8665.  
  8666. <:#240,9360>Return the value of a double word at a specified memory address.
  8667.  
  8668. @Small_Header@<:#259,9360>Syntax
  8669.  
  8670. <:#202,9360><:f,QCourier,>PEEKDW(addr)<:f>
  8671.  
  8672. @Indent_List@<:#240,9360>    <:f,QCourier,>addr<:f>    An integer expression with the address of the double word to peek.
  8673.  
  8674. @Small_Header@<+@><:#259,9360>Return Type & Value
  8675.  
  8676. @Indent_List@<:#245,9360><+!>INTEGER<-!>    Returns the value of the double word at addr.
  8677.  
  8678. @Small_Header@<:#259,9360>Remarks
  8679.  
  8680. <:#720,9360>It is sometimes necessary to read values from memory directly (for example, from the system BIOS data segment).  This function will return a double word quantity as a signed integer (-2,147,483,648 - +2,147,483,647) from a specified memory address.
  8681.  
  8682. @Small_Header@<:#259,9360>Examples
  8683.  
  8684. @Example_Text@<:#168,9360>PRINTLN "Timer ticks since midnight = ",<+!>PEEKDW(MKADDR(40h,6Ch))<-!>
  8685.  
  8686. @Small_Header@<:#259,9360>See Also
  8687.  
  8688. <:#720,9360><+!>MKADDR() <+">Function<-">, PEEKB<-!><+!>() <+">Function<-">, <-!><+!>PEEKW() 
  8689. <+">Function<-!><-"><+!>, <-!><+!>POKEB<-!><+!>() <+">Function<-">, 
  8690. <-!><+!>POKEDW<-!><+!>() <+">Function<-">, <-!><+!>POKEW() <+">Function<-!><-"><+!>, 
  8691. <-!><+!>VARADDR <+">Statement<-">, VAROFF <+">Statement<-">, VARSEG 
  8692. <+">Statement<-"><-!><-"><-"><-"><-"><-">
  8693.  
  8694. <:p<* >>
  8695.  
  8696. @Subhead@<:#360,9360>PEEKW()   <+">Function<-">
  8697.  
  8698. @Small_Header@<:#259,9360>Function
  8699.  
  8700. <:#240,9360>Return the value of a word at a specified memory address.
  8701.  
  8702. @Small_Header@<:#259,9360>Syntax
  8703.  
  8704. <:#202,9360><:f,QCourier,>PEEKW(addr)<:f>
  8705.  
  8706. @Indent_List@<:#240,9360>    <:f,QCourier,>addr<:f>    An integer expression with the address of the word to peek.
  8707.  
  8708. @Small_Header@<+@><:#259,9360>Return Type & Value
  8709.  
  8710. @Indent_List@<:#245,9360><+!>INTEGER<-!>    Returns the value of the word at addr.
  8711.  
  8712. @Small_Header@<:#259,9360>Remarks
  8713.  
  8714. <:#720,9360>It is sometimes necessary to read values from memory directly (for example, from the system BIOS data segment).  This function will return a word quantity (0-65,535) from a specified memory address.
  8715.  
  8716. @Small_Header@<:#259,9360>Examples
  8717.  
  8718. @Example_Text@<:#168,9360>PRINTLN "The usable memory size is ",<+!>PEEKW(MKADDR(40h,13h))<-!>
  8719.  
  8720. @Small_Header@<:#259,9360>See Also
  8721.  
  8722. <:#720,9360><+!>MKADDR() <+">Function<-">, PEEKB<-!><+!>() <+">Function<-">, <-!><+!>PEEKDW() 
  8723. <+">Function<-!><-"><+!>, <-!><+!>POKEB<-!><+!>() <+">Function<-">, 
  8724. <-!><+!>POKEDW<-!><+!>() <+">Function<-">, <-!><+!>POKEW() <+">Function<-!><-"><+!>, 
  8725. <-!><+!>VARADDR <+">Statement<-">, VAROFF <+">Statement<-">, VARSEG 
  8726. <+">Statement<-"><-!><-"><-"><-"><-"><-">
  8727.  
  8728. <:p<* >>
  8729.  
  8730. @Subhead@<+@><:#360,9360>POKEB   <+">Statement<-">
  8731.  
  8732. @Small_Header@<:#259,9360>Function
  8733.  
  8734. <:#240,9360>Write a byte to a specified memory address.
  8735.  
  8736. @Small_Header@<:#259,9360>Syntax
  8737.  
  8738. <:#202,9360><:f,QCourier,>POKEB addr,value<:f>
  8739.  
  8740. @Indent_List@<:#240,9360>    <:f,QCourier,>addr<:f>    An integer expression with the address to write to.
  8741.  
  8742. @Indent_List@<:#240,9360>    <:f,QCourier,>value<:f>    An integer expression with the value to write to addr.
  8743.  
  8744. @Small_Header@<:#259,9360>Remarks
  8745.  
  8746. <:#725,9360>You may have need to write directly to memory from time to time.  This statement complements the 
  8747. <+!>PEEKB()<-!> function and allows you to write a byte value (0-255) to a specific memory location.
  8748.  
  8749. @Small_Header@<:#259,9360>Examples
  8750.  
  8751. @Example_Text@<:#642,9360>BOOLEAN flag<**>INTEGER addr<**>VARADDR flag,addr<**><+!>POKEB addr,TRUE<-!> ' Set the flag to TRUE the hard way
  8752.  
  8753. @Small_Header@<:#259,9360>See Also
  8754.  
  8755. <:#720,9360><-"><+!>MKADDR() <+">Function<-">, PEEKB<-!><+!>() <+">Function<-">, 
  8756. <-!><+!>PEEKDW() <+">Function<-!><-"><+!>, <-!><+!>PEEKW() <+">Function<-!><-"><+!>, 
  8757. <-!><-"><+!>POKEDW<-!><+!>() <+">Function<-">, <-!><+!>POKEW() <+">Function<-!><-"><+!>, 
  8758. <-!><+!>VARADDR <+">Statement<-">, VAROFF <+">Statement<-">, VARSEG 
  8759. <+">Statement<-!><-">
  8760.  
  8761. <:p<* >>
  8762.  
  8763. @Subhead@<+@><:#360,9360>POKEDW   <+">Statement<-">
  8764.  
  8765. @Small_Header@<:#259,9360>Function
  8766.  
  8767. <:#240,9360>Write a double word to a specified memory address.
  8768.  
  8769. @Small_Header@<:#259,9360>Syntax
  8770.  
  8771. <:#202,9360><:f,QCourier,>POKEDW addr,value<:f>
  8772.  
  8773. @Indent_List@<:#240,9360>    <:f,QCourier,>addr<:f>    An integer expression with the address to write to.
  8774.  
  8775. @Indent_List@<:#240,9360>    <:f,QCourier,>value<:f>    An integer expression with the value to write to addr.
  8776.  
  8777. @Small_Header@<:#259,9360>Remarks
  8778.  
  8779. <:#725,9360>You may have need to write directly to memory from time to time.  This statement complements the 
  8780. <+!>PEEKDW()<-!> function and allows you to write a double word value (-2,147,483,648 - +2,147,483,647) to a specific memory location.
  8781.  
  8782. @Small_Header@<:#259,9360>Examples
  8783.  
  8784. @Example_Text@<:#642,9360>MONEY   amt<**>INTEGER addr<**>VARADDR amt,addr<**><+!>POKEDW addr,123456<-!> ' Set amt to $1234.56 the hard way
  8785.  
  8786. @Small_Header@<:#259,9360>See Also
  8787.  
  8788. <:#720,9360><-"><+!>MKADDR() <+">Function<-">, PEEKB<-!><+!>() <+">Function<-">, 
  8789. <-!><+!>PEEKDW() <+">Function<-!><-"><+!>, <-!><+!>PEEKW() <+">Function<-!><-"><+!>, 
  8790. <-!><-"><+!>POKEB<-!><+!>() <+">Function<-">, <-!><+!>POKEW() <+">Function<-!><-"><+!>, 
  8791. <-!><+!>VARADDR <+">Statement<-">, VAROFF <+">Statement<-">, VARSEG 
  8792. <+">Statement<-!><-">
  8793.  
  8794. <:p<* >>
  8795.  
  8796. @Subhead@<+@><:#360,9360>POKEW   <+">Statement<-">
  8797.  
  8798. @Small_Header@<:#259,9360>Function
  8799.  
  8800. <:#240,9360>Write a word to a specified memory address.
  8801.  
  8802. @Small_Header@<:#259,9360>Syntax
  8803.  
  8804. <:#202,9360><:f,QCourier,>POKEW addr,value<:f>
  8805.  
  8806. @Indent_List@<:#240,9360>    <:f,QCourier,>addr<:f>    An integer expression with the address to write to.
  8807.  
  8808. @Indent_List@<:#240,9360>    <:f,QCourier,>value<:f>    An integer expression with the value to write to addr.
  8809.  
  8810. @Small_Header@<:#259,9360>Remarks
  8811.  
  8812. <:#725,9360>You may have need to write directly to memory from time to time.  This statement complements the 
  8813. <+!>PEEKW()<-!> function and allows you to write a word value (0-65,535) to a specific memory location.
  8814.  
  8815. @Small_Header@<:#259,9360>Examples
  8816.  
  8817. @Example_Text@<:#642,9360>DATE    dob<**>INTEGER addr<**>VARADDR dob,addr<**><+!>POKEW addr,MKDATE(1967,10,31)<-!> ' Set dob the hard way
  8818.  
  8819. @Small_Header@<:#259,9360>See Also
  8820.  
  8821. <:#720,9360><-"><+!>MKADDR() <+">Function<-">, PEEKB<-!><+!>() <+">Function<-">, 
  8822. <-!><+!>PEEKDW() <+">Function<-!><-"><+!>, <-!><+!>PEEKW() <+">Function<-!><-"><+!>, 
  8823. <-!><-"><+!>POKEB<-!><+!>() <+">Function<-">, <-!><+!>POKEDW() <+">Function<-!><-"><+!>, 
  8824. <-!><+!>VARADDR <+">Statement<-">, VAROFF <+">Statement<-">, VARSEG 
  8825. <+">Statement<-!><-">
  8826.  
  8827. <:p<* >>
  8828.  
  8829. @Subhead@<:#360,9360>POP   <+">Statement<-">
  8830.  
  8831. @Small_Header@<:#259,9360>Function
  8832.  
  8833. <:#240,9360>Pop the results of one or more expressions from a stack.
  8834.  
  8835. @Small_Header@<:#259,9360>Syntax
  8836.  
  8837. <:#202,9360><:f,QCourier,>POP<:f><:f,QCourier,> var<[>,var]<:f>
  8838.  
  8839. @Indent_List@<:#240,9360>    <:f,QCourier,>var<:f>    A variable of any type in which to retrieve previously pushed expression.
  8840.  
  8841. @Small_Header@<:#259,9360>Remarks
  8842.  
  8843. <:#970,9360>This statement will retrieve the results of one or more expressions of any type from a stack into a list of variables.  The values should have been previously pushed with the 
  8844. <+!>PUSH<-!> statement.  Together <+!>PUSH<-!> and <+!>POP<-!> can be used for parameter passing, to create 'local' variables, or to reverse the order of arguments.
  8845.  
  8846. @Small_Header@<:#259,9360>Examples
  8847.  
  8848. @Example_Text@<:#5412,9360>INTEGER i, tc<**>STRING  s<**>LET tc = TOKCOUNT()<**>WHILE (TOKCOUNT() <;> 0) PUSH GETTOKEN() ' push them in order<**>FOR i = 1 TO tc<**>  
  8849. <+!>POP s<-!>                                ' pop them in reverse<**>  PRINTLN s<**>NEXT<**><**>INTEGER i<**>FOR i = 1 TO 10<**>  PRINT i," - "<**>  GOSUB sub<**>NEXT<**>END<**>:sub<**>PUSH i                                 ' temporarily save i<**>LET i = 
  8850. i*i<**>PRINTLN i<**><+!>POP i<-!>                                  ' restore saved i<**>RETURN<**><**>INTEGER v<**>PRINT "A cube with dimensions 2X3X4"<**>PUSH 2,3,4                             ' pass pushed parameters<**>GOSUB vol<+!><**>POP v<-!>         
  8851.                          ' pop result<**>PRINTLN "has volume ",v<**>END<**>:vol<**>INTEGER w,h,d<**><+!>POP d,h,w<-!>                              ' pop passed parameter<**>PUSH w*h*d                             ' push result<**>RETURN
  8852.  
  8853. @Small_Header@<:#259,9360>See Also
  8854.  
  8855. <:#240,9360><-"><-"><-"><-"><+!>PUSH <+">Statement<-!><-"><-"><-"><-">
  8856.  
  8857. <:p<* >>
  8858.  
  8859. @Subhead@<:#360,9360>PPENAME()   <+">Function<-">
  8860.  
  8861. @Small_Header@<:#259,9360>Function
  8862.  
  8863. <:#240,9360>Return the base name of an executing PPE file.
  8864.  
  8865. @Small_Header@<:#259,9360>Syntax
  8866.  
  8867. <:#202,9360><:f,QCourier,>PPENAME<:f><:f,QCourier,>(<:f><:f,QCourier,>)<:f>
  8868.  
  8869. @Indent_List@<:#240,9360>    No arguments are required
  8870.  
  8871. @Small_Header@<:#259,9360>Return Type & Value
  8872.  
  8873. @Indent_List@<:#485,9360><+!>STRING<-!>    Returns the base file name (without path or extension) of the currently executing PPE.
  8874.  
  8875. @Small_Header@<:#259,9360>Remarks
  8876.  
  8877. <:#720,9360>This function will return the name of the PPE file that is running.  This can be useful when writing PPL applications that will use data files that you would like to keep named the same as the parent application regardless of what the PPE name may change to
  8878. .
  8879.  
  8880. @Small_Header@<:#259,9360>Examples
  8881.  
  8882. @Example_Text@<:#642,9360>STRING s<**>FOPEN 1,PPEPATH()+<+!>PPENAME()<-!>+".CFG",O_RD,S_DN<**>FGET 1,s<**>FCLOSE 1
  8883.  
  8884. @Small_Header@<:#259,9360>See Also
  8885.  
  8886. <:#240,9360><-"><-"><-"><+!>PPEPATH() <+">Function<-"><-!>
  8887.  
  8888. <:p<* >>
  8889.  
  8890. @Subhead@<:#360,9360>PPEPATH()   <+">Function<-">
  8891.  
  8892. @Small_Header@<:#259,9360>Function
  8893.  
  8894. <:#240,9360>Return the path of an executing PPE file.
  8895.  
  8896. @Small_Header@<:#259,9360>Syntax
  8897.  
  8898. <:#202,9360><:f,QCourier,>PPEPATH<:f><:f,QCourier,>(<:f><:f,QCourier,>)<:f>
  8899.  
  8900. @Indent_List@<:#240,9360>    No arguments are required
  8901.  
  8902. @Small_Header@<:#259,9360>Return Type & Value
  8903.  
  8904. @Indent_List@<:#485,9360><+!>STRING<-!>    Returns the path (without file name or extension) of the currently executing PPE.
  8905.  
  8906. @Small_Header@<:#259,9360>Remarks
  8907.  
  8908. <:#720,9360>This function will return the path of the PPE file that is running.  This can be useful when writing PPL applications that will use files that you would like to keep in the same location as the parent application regardless of where the PPE may be installed
  8909. .
  8910.  
  8911. @Small_Header@<:#259,9360>Examples
  8912.  
  8913. @Example_Text@<:#642,9360>STRING s<**>FOPEN 1,<+!>PPEPATH()<-!>+PPENAME()+".CFG",O_RD,S_DN<**>FGET 1,s<**>FCLOSE 1
  8914.  
  8915. @Small_Header@<:#259,9360>See Also
  8916.  
  8917. <:#240,9360><-"><-"><-"><+!>PPENAME() <+">Function<-"><-!>
  8918.  
  8919. <:p<* >>
  8920.  
  8921. @Subhead@<:#360,9360>PRINT/PRINTLN   <+">Statements<-">
  8922.  
  8923. @Small_Header@<:#259,9360>Function
  8924.  
  8925. <:#240,9360>Print (write) a line to the screen (with an optional newline appended)<*7><*7>.
  8926.  
  8927. @Small_Header@<:#259,9360>Syntax
  8928.  
  8929. <:#606,9360><:f,QCourier,>PRINT<:f><:f,QCourier,> exp<[>,exp]<:f><:f,QCourier,><**>-or-<**>PRINTLN<:f><:f,QCourier,> <[>exp<[>,exp]]<:f>
  8930.  
  8931. @Indent_List@<:#240,9360>    <:f,QCourier,>exp<:f>    An expression of any type to evaluate and write to the screen.
  8932.  
  8933. @Small_Header@<:#259,9360>Remarks
  8934.  
  8935. <:#1215,9360>These statements will evalutate zero, one or more expressions of any type and write the results to the display.  The 
  8936. <+!>PRINTLN<-!> statement will append a newline to the end of the expressions; 
  8937. <+!>PRINT<-!> will not.  Note that at least one expression must be specified for 
  8938. <+!>PRINT<-!>, unlike the <+!>PRINTLN<-!> statement which need not have any arguments passed to it.  Finally, both statements will process all @ codes and display them as expected.
  8939.  
  8940. @Small_Header@<:#259,9360>Examples
  8941.  
  8942. @Example_Text@<:#1264,9360><+!>PRINT "The name of the currently running PPE file is "<**>PRINTLN PPENAME(),"."<**>PRINT "The path where it is located is "<**>PRINTLN PPEPATH(),"."<**>PRINT "The date is ",DATE()," and the time is ",TIME(),"."<**>PRINTLN<**>PRINT "@X1FThis is bright wh
  8943. ite on blue..."<**>PRINTLN "how do you like it @FIRST@"<-!>
  8944.  
  8945. @Small_Header@<:#259,9360>See Also
  8946.  
  8947. <:#240,9360><-"><-"><-"><-"><+!>MPRINT/MPRINTLN <+">Statements<-">, SPRINT/SPRINTLN 
  8948. <+">Statements<-"><-!><-">
  8949.  
  8950. <:p<* >>
  8951.  
  8952. @Subhead@<:#360,9360>PROMPTSTR   <+">Statement<-">
  8953.  
  8954. @Small_Header@<:#259,9360>Function
  8955.  
  8956. <:#240,9360>Prompt the user for a string of text in a specific format.
  8957.  
  8958. @Small_Header@<:#259,9360>Syntax
  8959.  
  8960. <:#202,9360><:f,QCourier,>PROMPT<:f><:f,QCourier,>STR prompt,var,len,valid,flags<:f>
  8961.  
  8962. @Indent_List@<:#480,9360>    <:f,QCourier,>prompt<:f>    An integer expression with the prompt number from PCBTEXT to display to the user.
  8963.  
  8964. @Indent_List@<:#240,9360>    <:f,QCourier,>var<:f>    The variable in which to store the user's input.
  8965.  
  8966. @Indent_List@<:#240,9360>    <:f,QCourier,>len<:f>    An integer expression with maximum length of text to input.
  8967.  
  8968. @Indent_List@<:#240,9360>    <:f,QCourier,>valid<:f>    A string expression with the valid characters that the user may enter.
  8969.  
  8970. @Indent_List@<:#240,9360>    <:f,QCourier,>flags<:f>    An integer expression with flags to modify how the statement works.
  8971.  
  8972. @Small_Header@<:#259,9360>Remarks
  8973.  
  8974. <:#2425,9360>This statement will accept a string of input from the user, up to the length defined.  The prompt parameter will be used to find the prompt from PCBTEXT (which includes the prompt color) to display to the user.  Only characters found in the valid parameter 
  8975. will be accepted.  However, the flags parameter may affect how prompt is displayed and the valid characters that are accepted.  Individual flags may be added together as needed.  Several functions exist to easily specify commonly used valid character masks.
  8976.   They are <+!>MASK_ALNUM()<-!>, <+!>MASK_ALPHA()<-!>, <+!>MASK_ASCII()<-!>, 
  8977. <+!>MASK_FILE()<-!>, <+!>MASK_NUM()<-!>, <+!>MASK_PATH()<-!>, and 
  8978. <+!>MASK_PWD()<-!>.  Defined flag values are <+!>AUTO<-!>, <+!>DEFS<-!>, 
  8979. <+!>ECHODOTS<-!>, <+!>ERASELINE<-!>, <+!>FIELDLEN<-!>, <+!>GUIDE<-!>, 
  8980. <+!>HIGHASCII<-!>, <+!>LFAFTER<-!>, <+!>LFBEFORE<-!>, <+!>NEWLINE<-!>, 
  8981. <+!>NOCLEAR<-!>, <+!>STACKED<-!>, <+!>UPCASE<-!>, <+!>WORDWRAP<-!>, and 
  8982. <+!>YESNO<-!>.
  8983.  
  8984. @Small_Header@<:#259,9360>Examples
  8985.  
  8986. @Example_Text@<:#2528,9360>BOOLEAN b<**>DATE    d<**>INTEGER i<**>MONEY   m<**>STRING  s<**>TIME    t<**>' NOTE:  prompt 706 is used here for all statements;<**>'        you may use any prompt you wish<+!><**>PROMPT<-!><+!>STR<-!><+!> 706<-!><+!>,b,1,"10",LFBEFORE+NEWLINE<**>PROMPT<-!>
  8987. <+!>STR<-!><+!> 706<-!><+!>,d,8,"0123456789-",NEWLINE+NOCLEAR<**>PROMPT<-!><+!>STR<-!><+!> 706<-!><+!>,i,20,MASK_NUM(),NEWLINE<**>PROMPT<-!><+!>STR<-!><+!> 706<-!><+!>,m,9,MASK_NUM()+".",NEWLINE+DEFS+FIELDLEN<**>PROMPT<-!><+!>STR<-!><+!> 706<-!><+!>,s,63,MA
  8988. SK_ASCII(),NEWLINE+FIELDLEN+GUIDE<**>PROMPT<-!><+!>STR<-!><+!> 706<-!><+!>,t,5,"0123456789"+":",NEWLINE+LFAFTER<-!><**>PRINTLN b," ",d," ",i<**>PRINTLN m," ",s," ",t
  8989.  
  8990. @Small_Header@<:#259,9360>See Also
  8991.  
  8992. <:#240,9360><-"><-"><-"><-"><-"><-"><-"><-"><-"><+!>INPUT <+">Statement<-">, INPUT... 
  8993. <+">Statement<-">, INPUTSTR <+">Statement<-">, INPUTTEXT <+">Statement<-!><-">
  8994.  
  8995. <:#240,9360><+!>
  8996.  
  8997. <:p<* >>
  8998.  
  8999. @Subhead@<:#360,9360>PSA()   <+">Function<-">
  9000.  
  9001. @Small_Header@<:#259,9360>Function
  9002.  
  9003. <:#240,9360>Determine whether or not a given PSA is installed.
  9004.  
  9005. @Small_Header@<:#259,9360>Syntax
  9006.  
  9007. <:#202,9360><:f,QCourier,>PSA<:f><:f,QCourier,>(<:f><:f,QCourier,>num)<:f>
  9008.  
  9009. @Indent_List@<:#480,9360>    <:f,QCourier,>num<:f>    An integer expression with the number of the PSA to check for the existence of.
  9010.  
  9011. @Small_Header@<:#259,9360>Return Type & Value
  9012.  
  9013. @Indent_List@<:#485,9360><+!>BOOLEAN<-!>    Returns <+!>TRUE<-!></`>if the specified PSA exists or 
  9014. <+!>FALSE<-!> if it doesn't exist for the following values of num:
  9015.  
  9016. @Indent_List@<:#240,9360>    1    The Alias PSA;
  9017.  
  9018. @Indent_List@<:#240,9360>    2    The Verification PSA.
  9019.  
  9020. @Indent_List@<:#240,9360>    3    The Address PSA;
  9021.  
  9022. @Indent_List@<:#240,9360>    4    The Password PSA;
  9023.  
  9024. @Indent_List@<:#240,9360>    5    The Statistics PSA.
  9025.  
  9026. @Indent_List@<:#240,9360>    6    The Notes PSA.
  9027.  
  9028. @Small_Header@<:#259,9360>Remarks
  9029.  
  9030. <:#965,9360>This function allows you to determine whether or not a given PCBoard Supported Allocation (PSA) is installed.  For each of the six PSAs it will return 
  9031. <+!>TRUE<-!> if installed or <+!>FALSE<-!> if not installed.  It is useful when you want to write a generic PPL application that will access one or more PSAs that may or may not be installed.
  9032.  
  9033. @Small_Header@<:#259,9360>Examples
  9034.  
  9035. @Example_Text@<:#1482,9360>STRING ynStr(1)<**>LET ynStr(0) = "NO"<**>LET ynStr(1) = "YES"<**>PRINTLN "       Alias Support Enabled?  ",ynStr(<+!>PSA(1)<-!>)<**>PRINTLN "Verification Support Enabled?  ",ynStr(<+!>PSA(2)<-!>)<**>PRINTLN "     Address Support Enabled?  ",ynStr(<+!>PSA(3
  9036. )<-!>)<**>PRINTLN "    Password Support Enabled?  ",ynStr(<+!>PSA(4)<-!>)<**>PRINTLN "  Statistics Support Enabled?  ",ynStr(<+!>PSA(5)<-!>)<**>PRINTLN "       Notes Support Enabled?  ",ynStr(<+!>PSA(6)<-!>)
  9037.  
  9038. @Small_Header@<:#259,9360>See Also
  9039.  
  9040. <:#240,9360><-"><-"><-"><-"><-">
  9041.  
  9042. <:p<* >>
  9043.  
  9044. @Subhead@<:#360,9360>PUSH   <+">Statement<-">
  9045.  
  9046. @Small_Header@<:#259,9360>Function
  9047.  
  9048. <:#240,9360>Push (save) the results of one or more expressions on a stack.
  9049.  
  9050. @Small_Header@<:#259,9360>Syntax
  9051.  
  9052. <:#202,9360><:f,QCourier,>PUSH<:f><:f,QCourier,> exp<[>,exp]<:f>
  9053.  
  9054. @Indent_List@<:#240,9360>    <:f,QCourier,>exp<:f>    An expression of any type to evaluate and push.
  9055.  
  9056. @Small_Header@<:#259,9360>Remarks
  9057.  
  9058. <:#970,9360>This statement will evalutate one or more expressions of any type and push the results onto a stack for temporary storage.  The results of those expressions may be retrieved via the 
  9059. <+!>POP<-!> statement.  Together <+!>PUSH<-!> and <+!>POP<-!> can be used for parameter passing, to create 'local' variables, or to reverse the order of arguments.
  9060.  
  9061. @Small_Header@<:#259,9360>Examples
  9062.  
  9063. @Example_Text@<:#5412,9360>INTEGER i, tc<**>STRING  s<**>LET tc = TOKCOUNT()<**>WHILE (TOKCOUNT() <;> 0) 
  9064. <+!>PUSH GETTOKEN()<-!> ' push them in order<**>FOR i = 1 TO tc<**>  POP s                                ' pop them in reverse<**>  PRINTLN s<**>NEXT<**><**>INTEGER i<**>FOR i = 1 TO 10<**>  PRINT i," - "<**>  GOSUB sub<**>NEXT<**>END<**>:sub<+!><**>PUSH i
  9065. <-!>                                 ' temporarily save i<**>LET i = i*i<**>PRINTLN i<**>POP i                                  ' restore saved i<**>RETURN<**><**>INTEGER v<**>PRINT "A cube with dimensions 2X3X4"<+!><**>PUSH 2,3,4<-!>                       
  9066.       ' pass pushed parameters<**>GOSUB vol<**>POP v                                  ' pop result<**>PRINTLN "has volume ",v<**>END<**>:vol<**>INTEGER w,h,d<**>POP d,h,w                              ' pop passed parameter<**><+!>PUSH w*h*d<-!>             
  9067.                 ' push result<**>RETURN
  9068.  
  9069. @Small_Header@<:#259,9360>See Also
  9070.  
  9071. <:#240,9360><-"><-"><-"><-"><+!>POP <+">Statement<-!><-"><-"><-"><-">
  9072.  
  9073. <:p<* >>
  9074.  
  9075. @Subhead@<+@><:#360,9360>PUTUSER   <+">Statement<-">
  9076.  
  9077. @Small_Header@<:#259,9360>Function
  9078.  
  9079. <:#240,9360>Copy values from predeclared variables to user record.
  9080.  
  9081. @Small_Header@<:#259,9360>Syntax
  9082.  
  9083. <:#202,9360><:f,QCourier,>PUTUSER<:f>
  9084.  
  9085. @Indent_List@<:#240,9360>    No arguments are required
  9086.  
  9087. @Small_Header@<:#259,9360>Remarks
  9088.  
  9089. <:#730,9360>There are many predeclared variables which may be used to access and change user information.  However, their values are undefined until you use the 
  9090. <+!>GETUSER<-!> statement, and any changes you make don't take hold until you use the 
  9091. <+!>PUTUSER<-!> statement.
  9092.  
  9093. @Small_Header@<:#259,9360>Examples
  9094.  
  9095. @Example_Text@<:#1580,9360>IF (PSA(3)) THEN<**>  GETUSER<**>  INPUT "Addr 1",U_ADDR(0)<**>  INPUT "Addr 2",U_ADDR(1)<**>  INPUT "City  ",U_ADDR(2)<**>  INPUT "State ",U_ADDR(3)<**>  INPUT "ZIP   ",U_ADDR(4)<**>  INPUT "Cntry ",U_ADDR(5)<+!><**>  PUTUSER<-!><**>ENDIF
  9096.  
  9097. @Small_Header@<:#259,9360>See Also
  9098.  
  9099. <:#240,9360><-"><+!>GETUSER <+">Statement<-"><-!><-"><-">
  9100.  
  9101. <:p<* >>
  9102.  
  9103. @Subhead@<:#360,9360>QUEST   <+">Statement<-">
  9104.  
  9105. @Small_Header@<:#259,9360>Function
  9106.  
  9107. <:#240,9360>Allow the user to answer a specified script questionnaire.
  9108.  
  9109. @Small_Header@<:#259,9360>Syntax
  9110.  
  9111. <:#202,9360><:f,QCourier,>QUEST scrnum<:f>
  9112.  
  9113. @Indent_List@<:#480,9360>    <:f,QCourier,>scrnum<:f>    The number of the script for the user to answer.  Valid values are 1 through the number of script questionnaires available.
  9114.  
  9115. @Small_Header@<:#259,9360>Remarks
  9116.  
  9117. <:#960,9360>This statement will present the user a specified script questionnaire number to answer.  The SCR.LST file for the current conference will be searched for the script.  If the questionnaire number is invalid (less than 1 or greater than the highest script num
  9118. ber defined) then nothing will be displayed.
  9119.  
  9120. @Small_Header@<:#259,9360>Examples
  9121.  
  9122. @Example_Text@<:#474,9360>INTEGER num<**>INPUT "Script to answer",num<+!><**>QUEST num<-!>
  9123.  
  9124. @Small_Header@<:#259,9360>See Also
  9125.  
  9126. <:#240,9360>
  9127.  
  9128. <:p<* >>
  9129.  
  9130. @Subhead@<:#360,9360>RANDOM()   <+">Function<-">
  9131.  
  9132. @Small_Header@<:#259,9360>Function
  9133.  
  9134. <:#240,9360>Return a random value between 0 and a specified limit.
  9135.  
  9136. @Small_Header@<:#259,9360>Syntax
  9137.  
  9138. <:#202,9360><:f,QCourier,>RANDOM(limit)<:f>
  9139.  
  9140. @Indent_List@<:#240,9360>    <:f,QCourier,>limit<:f>    An integer expression with the maximum random value desired.
  9141.  
  9142. @Small_Header@<+@><:#259,9360>Return Type & Value
  9143.  
  9144. @Indent_List@<:#245,9360><+!>INTEGER<-!>    Returns the random number in the range 0 to limit.
  9145.  
  9146. @Small_Header@<:#259,9360>Remarks
  9147.  
  9148. <:#480,9360>Random numbers have many applications from statistics to video games.  This function allows you to generate pseudo-random numbers in the range 0 to limit inclusive.
  9149.  
  9150. @Small_Header@<:#259,9360>Examples
  9151.  
  9152. @Example_Text@<:#1926,9360>INTEGER x,y<**>WHILE (KINKEY() <<<;> " ") DO<**>  CLS<**>  LET x = 1+<+!>RANDOM(50)<-!><**>  LET y = 1+<+!>RANDOM(22)<-!><**>  COLOR 1+<+!>RANDOM(14)<-!><**>  ANSIPOS x,y<**>  PRINT "Hit the SPACE BAR to continue"<**>  DELAY 18<**>  ANSIPOS x,y<**>  CLREOL<**>
  9153. ENDWHILE
  9154.  
  9155. @Small_Header@<:#259,9360>See Also
  9156.  
  9157. <:#240,9360><-"><-"><-"><-"><-"><-"><-"><-">
  9158.  
  9159. <:p<* >>
  9160.  
  9161. @Subhead@<+@><:#360,9360>RDUNET   <+">Statement<-">
  9162.  
  9163. @Small_Header@<:#259,9360>Function
  9164.  
  9165. <:#240,9360>Read information from the USERNET file for a specific node.
  9166.  
  9167. @Small_Header@<:#259,9360>Syntax
  9168.  
  9169. <:#202,9360><:f,QCourier,>RDUNET node<:f>
  9170.  
  9171. @Indent_List@<:#240,9360>    <:f,QCourier,>node<:f>    An integer expression with the node to read.
  9172.  
  9173. @Small_Header@<:#259,9360>Remarks
  9174.  
  9175. <:#960,9360>To facilitate internode communications, a file named USERNET.XXX is maintained with an entry for each node on the system.  This file is used by the BROADCAST command of PCBoard and to prevent multiple simultaneous logins, among other things.  This statement
  9176.  may be used to read information for any node.
  9177.  
  9178. @Small_Header@<:#259,9360>Examples
  9179.  
  9180. @Example_Text@<:#632,9360><+!>RDUNET PCBNODE()<-!><**>WRUNET PCBNODE(),UN_STAT(),UN_NAME(),UN_CITY(),"Running "+PPENAME(),""<+!><**>RDUNET 1<-!><**>WRUNET 1,UN_STAT(),UN_NAME(),UN_CITY(),UN_OPER(),"Hello there node 1"
  9181.  
  9182. @Small_Header@<:#259,9360>See Also
  9183.  
  9184. <:#240,9360><+!><-">UN_...() <+">Function<-!><-"><+!>, RDUNET<-!><+!><+"> Statement<-!><-"><-"><-"><-">
  9185.  
  9186. <:p<* >>
  9187.  
  9188. @Subhead@<+@><:#360,9360>RDUSYS   <+">Statement<-">
  9189.  
  9190. @Small_Header@<:#259,9360>Function
  9191.  
  9192. <:#240,9360>Read a USERS.SYS file in from disk.
  9193.  
  9194. @Small_Header@<:#259,9360>Syntax
  9195.  
  9196. <:#202,9360><:f,QCourier,>RDUSYS<:f>
  9197.  
  9198. @Indent_List@<:#240,9360>    No arguments are required
  9199.  
  9200. @Small_Header@<:#259,9360>Remarks
  9201.  
  9202. <:#970,9360>Some DOOR applications require a USERS.SYS file to access information about the caller.  This statement allows you to read the USERS.SYS file back into memory in case any changes were made by the DOOR during the 
  9203. <+!>SHELL<-!> statement.  This statement should only be used after a 
  9204. <+!>SHELL<-!> statement that was preceeded by a <+!>WRUSYS<-!> statement.
  9205.  
  9206. @Small_Header@<:#259,9360>Examples
  9207.  
  9208. @Example_Text@<:#632,9360>INTEGER ret<**>WRUSYS<**>SHELL FALSE,ret,"MYAPP.EXE",""<+!><**>RDUSYS<-!>
  9209.  
  9210. @Small_Header@<:#259,9360>See Also
  9211.  
  9212. <:#240,9360><+!>WRUSYS <+">Statement<-"><-!>
  9213.  
  9214. <:p<* >>
  9215.  
  9216. @Subhead@<:#360,9360>READLINE()   <+">Function<-">
  9217.  
  9218. @Small_Header@<:#259,9360>Function
  9219.  
  9220. <:#240,9360>Read a specific line number from a text file.
  9221.  
  9222. @Small_Header@<:#259,9360>Syntax
  9223.  
  9224. <:#202,9360><:f,QCourier,>READLINE<:f><:f,QCourier,>(file,line)<:f>
  9225.  
  9226. @Indent_List@<:#240,9360>    <:f,QCourier,>file<:f>    A string expression with the file name to read from.
  9227.  
  9228. @Indent_List@<:#240,9360>    <:f,QCourier,>line<:f>    An integer expression with the line number to read.
  9229.  
  9230. @Small_Header@<+@><:#259,9360>Return Type & Value
  9231.  
  9232. @Indent_List@<:#245,9360><+!>STRING<-!>    Returns the specified line number from file.
  9233.  
  9234. @Small_Header@<:#259,9360>Remarks
  9235.  
  9236. <:#1680,9360>It is often convienient to read a specified line number from a file without going to all the overhead of opening, reading and closing.  This function will open the file in read mode for share deny none access and quickly read up to the line number you speci
  9237. fy.  If the line you want doesn't exist an empty string will be returned.  Additionally, this function will remember the last file and line read so that it may quickly continue where it left off if you try to read a number of lines sequentially from the sam
  9238. e file.  Finally, the last file specified will remain open until the PPE exits and returns control to PCBoard.
  9239.  
  9240. @Small_Header@<:#259,9360>Examples
  9241.  
  9242. @Example_Text@<:#336,9360>PRINTLN "This system is running on IRQ ",<+!>READLINE(PCBDAT(),158)<-!><**>PRINTLN "with a base IO address of ",<+!>READLINE(PCBDAT(),159)<-!>
  9243.  
  9244. @Small_Header@<:#259,9360>See Also
  9245.  
  9246. <:#240,9360><-"><-"><-"><-"><-"><-"><-"><-">
  9247.  
  9248. <:p<* >>
  9249.  
  9250. @Subhead@<:#360,9360>REG...()   <+">Functions<-">
  9251.  
  9252. @Small_Header@<:#259,9360>Function
  9253.  
  9254. <:#240,9360>Get the value of a register.
  9255.  
  9256. @Small_Header@<:#259,9360>Syntax
  9257.  
  9258. <:#202,9360><:f,QCourier,>REG...<:f><:f,QCourier,>(<:f><:f,QCourier,>)<:f>
  9259.  
  9260. @Indent_List@<:#240,9360>    No arguments are required
  9261.  
  9262. <:#480,9360>REG should be followed by one of the following register names:  AH, AL, AX, BH, BL, BX, CF, CH, CL, CX, DH, DI, DL, DS, DX, ES, F or SI.
  9263.  
  9264. @Small_Header@<:#259,9360>Return Type & Value
  9265.  
  9266. @Indent_List@<:#245,9360><+!>BOOLEAN<-!>    (<+!>REGCF()<-!> only) Returns <+!>TRUE<-!> if the carry flag is set, 
  9267. <+!>FALSE<-!> otherwise.
  9268.  
  9269. @Indent_List@<:#245,9360><+!>INTEGER<-!>    (All others) Returns the value in the specified register.
  9270.  
  9271. @Small_Header@<:#259,9360>Remarks
  9272.  
  9273. <:#1930,9360>There are actually 18 different functions that return the values of registers.  AL, AH, BL, BH, CL, CH, DL, and DH will always return byte sized values (0-255).  AX, BX, CX, DX, DI, SI, DS, and ES will always return word sized values (0-65535).  F (flags) r
  9274. eturns the settings for the various 80x86 processor flags.  CF is a subset of F in that it only returns the status of the carry flag.  It exists because the carry flag is often used to report success or failure in assembly language.  The 
  9275. <+!>REGF()<-!> function returns the settings for the following flags:  
  9276. <+!>C<-!>arry, <+!>P<-!>arity, <+!>A<-!>uxilliary, <+!>Z<-!>ero, <+!>S<-!>ign, 
  9277. <+!>T<-!>rap, <+!>I<-!>nterrupt, <+!>D<-!>irection, and <+!>O<-!>verflow.  Their bit positions are as follows:
  9278.  
  9279. <:#240,9360>
  9280.  
  9281. <:t4>
  9282.  
  9283. <:#240,9360>
  9284.  
  9285. @Small_Header@<:#259,9360>Examples
  9286.  
  9287. @Example_Text@<:#2400,9360>' Create subdirectory - DOS function 39h<**>INTEGER addr<**>STRING  path<**>LET path = "C:\$TMPDIR$"<**>VARADDR path,addr<**>DOINTR 21h,39h,0,0,addr%00010000h,0,0,0,addr/00010000h,0<**>IF (<+!>REGCF()<-!> & (<+!>REGAX()<-!> = 3)) THEN<**>  PRINTLN "Error:  
  9288. Path not found"<**>ELSE IF (<+!>REGCF()<-!> & (<+!>REGAX()<-!> = 5)) THEN<**>  PRINTLN "Error:  Access Denied"<**>ELSE IF (<+!>REGCF()<-!>) THEN<**>  PRINTLN "Error:  Unknown Error"<**>ELSE<**>  PRINTLN "Directory successfully created..."<**>ENDIF
  9289.  
  9290. @Small_Header@<:#259,9360>See Also
  9291.  
  9292. <:#480,9360><-"><-"><+!>B2W() <+">Function<-">, DOINTR <+">Statement<-">, VARADDR 
  9293. <+">Statement<-">, VAROFF <+">Statement<-">, VARSEG <+">Statement<-"><-!>
  9294.  
  9295. <:p<* >>
  9296.  
  9297. @Subhead@<+@><:#360,9360>RENAME   <+">Statement<-">
  9298.  
  9299. @Small_Header@<:#259,9360>Function
  9300.  
  9301. <:#240,9360>Rename (or move) a file.
  9302.  
  9303. @Small_Header@<:#259,9360>Syntax
  9304.  
  9305. <:#202,9360><:f,QCourier,>RENAME old,new<:f>
  9306.  
  9307. @Indent_List@<:#240,9360>    <:f,QCourier,>old<:f>    A string expression with the old path and/or file name.
  9308.  
  9309. @Indent_List@<:#240,9360>    <:f,QCourier,>new<:f>    A string expression with the new path and/or file name.
  9310.  
  9311. @Small_Header@<:#259,9360>Remarks
  9312.  
  9313. <:#1685,9360>Similar to how the RENAME command works from the DOS prompt, this statement will take a file and give it a new name.  Unlike the RENAME command, the 
  9314. <+!>RENAME<-!> statement will not accept wildcards in the old or new parameters.  Also, it doesn't require that the old path and the new path be the same (the drive letters must match, but the paths need not), so it may be used to move files from one locati
  9315. on to another on a single drive.  So, you could use it to move a file from C:\PCB\NODE1 to C:\PCB\NODE2 (renaming it at the same time if you wish), but you couldn't use it to move a file from C:\PCB\NODE1 to D:\WORK\NODE1.
  9316.  
  9317. @Small_Header@<:#259,9360>Examples
  9318.  
  9319. @Example_Text@<:#1106,9360>' Swap the PCBOARD DAT & NXT files<+!><**>RENAME "PCBOARD.DAT","PCBOARD.TMP"<**>RENAME "PCBOARD.NXT","PCBOARD.DAT"<**>RENAME "PCBOARD.TMP","PCBOARD.NXT"<**><-!><**>' Move the file to the backup directory<+!><**>RENAME "PPE.LOG","LOGBAK\"+I2S(DATE()*86400+TI
  9320. ME(),36)<-!>
  9321.  
  9322. @Small_Header@<:#259,9360>See Also
  9323.  
  9324. <:#240,9360><-">
  9325.  
  9326. <:p<* >>
  9327.  
  9328. @Subhead@<:#360,9360>REPLACE()   <+">Function<-">
  9329.  
  9330. @Small_Header@<:#259,9360>Function
  9331.  
  9332. <:#240,9360>Change all occurences of a given character to another character in a string.
  9333.  
  9334. @Small_Header@<:#259,9360>Syntax
  9335.  
  9336. <:#202,9360><:f,QCourier,>REPLACE<:f><:f,QCourier,>(str,old,new)<:f>
  9337.  
  9338. @Indent_List@<:#240,9360>    <:f,QCourier,>str<:f>    Any string expression.
  9339.  
  9340. @Indent_List@<:#240,9360>    <:f,QCourier,>old<:f>    A string expression with the old character to be replaced.
  9341.  
  9342. @Indent_List@<:#240,9360>    <:f,QCourier,>new<:f>    A string expression with the new character to replace with.
  9343.  
  9344. @Small_Header@<+@><:#259,9360>Return Type & Value
  9345.  
  9346. @Indent_List@<:#245,9360><+!>STRING<-!>    Returns str with all occurences of old changed to new.
  9347.  
  9348. @Small_Header@<:#259,9360>Remarks
  9349.  
  9350. <:#720,9360>This function will search a string for a given character and replace all instances of that character with another character.  This can be useful in many scenarios, especially when formatting text for display purposes.
  9351.  
  9352. @Small_Header@<:#259,9360>Examples
  9353.  
  9354. @Example_Text@<:#326,9360>PRINTLN "Your internet address on this system is:"<**>PRINTLN <+!>REPLACE(LOWER(U_NAME())," ",".")<-!>,"@clarkdev.com"
  9355.  
  9356. @Small_Header@<:#259,9360>See Also
  9357.  
  9358. <:#240,9360><-"><-"><-"><-"><-"><-"><-"><-">
  9359.  
  9360. <:p<* >>
  9361.  
  9362. @Subhead@<:#360,9360>RESETDISP   <+">Statement<-">
  9363.  
  9364. @Small_Header@<:#259,9360>Function
  9365.  
  9366. <:#240,9360>Reset the display to allow more information after an abort.
  9367.  
  9368. @Small_Header@<:#259,9360>Syntax
  9369.  
  9370. <:#202,9360><:f,QCourier,>RESETDISP<:f>
  9371.  
  9372. @Indent_List@<:#240,9360>    No arguments are required
  9373.  
  9374. @Small_Header@<:#259,9360>Remarks
  9375.  
  9376. <:#1210,9360>PCBoard normally automatically counts lines and, if enabled, pauses the display after every screenful.  The user may (unless disabled) abort the display at any 
  9377. <:f,QCourier,>MORE?<:f> prompt or with the ^K/^X keys.  If this happens no further information will be displayed until you use the 
  9378. <+!>RESETDISP<-!> statement.  You can check to see if <+!>RESETDISP<-!> is necessary (ie, has the user aborted the display) with the 
  9379. <+!>ABORT()<-!> function.
  9380.  
  9381. @Small_Header@<:#259,9360>Examples
  9382.  
  9383. @Example_Text@<:#1264,9360>INTEGER I<**>STARTDISP FCL<**>' While the user has not aborted, continue<**>WHILE (!ABORT()) DO<**>  PRINTLN "I is equal to ",I<**>  INC I<**>ENDWHILE<+!><**>RESETDISP<-!>
  9384.  
  9385. @Small_Header@<:#259,9360>See Also
  9386.  
  9387. <+@><:#240,9360><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><+!>ABORT() <+">Function<-!><-"><+!>, STARTDISP 
  9388. <+">Statement<-!><-"><-"><-!>
  9389.  
  9390. <:p<* >>
  9391.  
  9392. @Subhead@<:#360,9360>RESTSCRN   <+">Statement<-">
  9393.  
  9394. @Small_Header@<:#259,9360>Function
  9395.  
  9396. <:#240,9360>Restore the screen from a previously saved buffer.
  9397.  
  9398. @Small_Header@<:#259,9360>Syntax
  9399.  
  9400. <:#202,9360><:f,QCourier,>RESTSCRN<:f>
  9401.  
  9402. @Indent_List@<:#240,9360>    No arguments are required
  9403.  
  9404. @Small_Header@<:#259,9360>Remark
  9405.  
  9406. <:#2175,9360>PCBoard will save and restore the screen before and after certain functions, such as SysOp chat.  This allows the user to continue right where he left off without having to remember what was on the screen before being interrupted.  You can add that same fun
  9407. ctionality with the <+!>SAVESCRN<-!> and <+!>RESTSCRN<-!> statements.  The 
  9408. <+!>SAVESCRN<-!> statement allocates memory for a buffer in which to save the screen.  If the 
  9409. <+!>SAVESCRN<-!> statement isn't followed by a <+!>RESTSCRN<-!> statement then that memory will never be deallocated.  Finally, this statement will work regardless of ANSI availability; the screen is only saved up to the position of the cursor and this stat
  9410. ement assumes that it can safely restore the screen using standard teletype conventions to just scroll the data onto the display.
  9411.  
  9412. @Small_Header@<:#259,9360>Examples
  9413.  
  9414. @Example_Text@<:#1580,9360>SAVESCRN<**>CLS<**>PRINTLN "We interrupt your regular BBS session"<**>PRINTLN "with this important message:"<**>NEWLINE<**>PRINTLN "A subscription to this system only costs $5!"<**>PRINTLN "Subscribe today!"<**>NEWLINES 2<**>WAIT<+!><**>RESTSCRN<-!>
  9415.  
  9416. @Small_Header@<:#259,9360>See Also
  9417.  
  9418. <:#240,9360><-"><-"><-"><-"><-"><-"><-"><-"><+!>SAVESCRN <+">Statement<-"><-!><-"><-"><+!><-"><-"><-">
  9419.  
  9420. <:p<* >>
  9421.  
  9422. @Subhead@<:#360,9360>RETURN   <+">Statement<-">
  9423.  
  9424. @Small_Header@<:#259,9360>Function
  9425.  
  9426. <:#240,9360>Transfer program control back to a previously saved address.
  9427.  
  9428. @Small_Header@<:#259,9360>Syntax
  9429.  
  9430. <:#202,9360><:f,QCourier,>RETURN<:f>
  9431.  
  9432. @Indent_List@<:#240,9360>    No arguments are required
  9433.  
  9434. @Small_Header@<:#259,9360>Remarks
  9435.  
  9436. <:#1215,9360>It is often necessary to perform an indentical set of instructions several times in a program.  This leaves you with two choices.  One, rewrite the code several times (and hope you do it right each time), or two, write it once as a subroutine, then use 
  9437. <+!>GOSUB<-!> to run it.  This statement will save the address of the next line so that a 
  9438. <+!>RETURN<-!> statement at the end of the subroutine can instruct PPL to resume execution with the line following the 
  9439. <+!>GOSUB<-!>.
  9440.  
  9441. @Small_Header@<:#259,9360>Examples
  9442.  
  9443. @Example_Text@<:#2370,9360>STRING Question, Answer<**>LET Question = "What is your street address ..."<**>GOSUB ask<**>LET Question = "What is your city, state and zip ..."<**>GOSUB ask<**>END<**><**>:ask ' Sub to ask a question, get an answer, and log them to a file<**>LET Answer = 
  9444. ""<**>PRINTLN "@X0E",Question<**>INPUT "",Answer<**>NEWLINES 2<**>FPUTLN 0,"Q: ",STRIPATX(Question)<**>FPUTLN 0,"A: ",Answer<+!><**>RETURN<-!>
  9445.  
  9446. @Small_Header@<:#259,9360>See Also
  9447.  
  9448. <:#240,9360><-"><-"><-"><-"><-"><-"><-"><-"><+!>END <+">Statement<-">, <-!><+!>GOSUB 
  9449. <+">Statement<-">, GOTO <+">Statement<-!><-"><+!><-">, STOP <+">Statement<-!><-"><-"><-"><+!><-"><-"><-">
  9450.  
  9451. <:p<* >>
  9452.  
  9453. @Subhead@<:#360,9360>RIGHT()   <+">Function<-">
  9454.  
  9455. @Small_Header@<:#259,9360>Function
  9456.  
  9457. <:#240,9360>Access the right most characters from a string.
  9458.  
  9459. @Small_Header@<:#259,9360>Syntax
  9460.  
  9461. <:#202,9360><:f,QCourier,>RIGHT<:f><:f,QCourier,>(str,chars)<:f>
  9462.  
  9463. @Indent_List@<:#240,9360>    <:f,QCourier,>str<:f>    A string expression to take the right most characters of.
  9464.  
  9465. @Indent_List@<:#480,9360>    <:f,QCourier,>chars<:f>    An integer expression with the number of characters to take from the right end of str.
  9466.  
  9467. @Small_Header@<+@><:#259,9360>Return Type & Value
  9468.  
  9469. @Indent_List@<:#245,9360><+!>STRING<-!>    Returns a string with the right most chars characters of str.
  9470.  
  9471. @Small_Header@<:#259,9360>Remarks
  9472.  
  9473. <:#960,9360>This function will return a sub string with the right most chars characters of a specified string.  This can be useful in data processing as well as text formatting.  If chars is less than or equal to 0 then the returned string will be empty.  If chars is g
  9474. reater than the length of str then the returned string will have spaces added to the right to pad it out to the full length specified.
  9475.  
  9476. @Small_Header@<:#259,9360>Examples
  9477.  
  9478. @Example_Text@<:#1600,9360>WHILE (RANDOM(250) <<<;> 0) PRINT <+!>RIGHT(RANDOM(250),4)<-!>," "<**><**>STRING s<**>FOPEN 1,"DATA.TXT",O_RD,S_DN<**>WHILE (!FERR(1)) DO<**>  FGET 1,s<**>  PRINT RTRIM(LEFT(s,25)," ")," - "<**>  PRINTLN 
  9479. <+!>RIGHT(s,LEN(s)-25)<-!><**>ENDWHILE<**>FCLOSE 1
  9480.  
  9481. @Small_Header@<:#259,9360>See Also
  9482.  
  9483. <:#240,9360><-"><-"><-"><-"><-"><+!>LEFT() <+">Function<-!><-"><-"><-"><-"><-"><-"><+!>, MID() 
  9484. <+">Function<-!><-"><-">
  9485.  
  9486. <:p<* >>
  9487.  
  9488. @Subhead@<:#360,9360>RTRIM()   <+">Function<-">
  9489.  
  9490. @Small_Header@<:#259,9360>Function
  9491.  
  9492. <:#240,9360>Trim a specified character from the right end of a string.
  9493.  
  9494. @Small_Header@<:#259,9360>Syntax
  9495.  
  9496. <:#202,9360><:f,QCourier,>RTRIM(str,ch)<:f>
  9497.  
  9498. @Indent_List@<:#240,9360>    <:f,QCourier,>str<:f>    Any string expression.
  9499.  
  9500. @Indent_List@<:#240,9360>    <:f,QCourier,>ch<:f>    A string with the character to strip from the right end of str.
  9501.  
  9502. @Small_Header@<:#259,9360>Return Type & Value
  9503.  
  9504. @Indent_List@<:#245,9360><+!>STRING<-!>    Returns the trimmed str.
  9505.  
  9506. @Small_Header@<:#259,9360>Remarks
  9507.  
  9508. <:#720,9360>A common need in programming is to strip leading and/or trailing spaces (or other characters).  This function will strip a specified character from the right end of a string and return the trimmed string.
  9509.  
  9510. @Small_Header@<:#259,9360>Examples
  9511.  
  9512. @Example_Text@<:#820,9360>STRING s<**>LET s = "   TEST   "<**>PRINTLN <+!>RTRIM(s," ")<-!> ' Will print "   TEST"<**>PRINTLN 
  9513. <+!>RTRIM(".....DA"+"TA.....",".")<-!> ' Will print ".....DATA"<**>PRINTLN 
  9514. <+!>RTRIM(".....DA"+"TA....."," ")<-!> ' Will print ".....DATA....."
  9515.  
  9516. @Small_Header@<:#259,9360>See Also
  9517.  
  9518. <:#240,9360><-"><-"><-"><-"><-"><-"><-"><-"><-"><+!><-"><-"><-">LTRIM() <+">Function<-">, TRIM() 
  9519. <+">Function<-">
  9520.  
  9521. <:p<* >>
  9522.  
  9523. @Subhead@<:#360,9360>S2I()   <+">Function<-">
  9524.  
  9525. @Small_Header@<:#259,9360>Function
  9526.  
  9527. <:#240,9360>Convert a string in a specified number base to an integer.
  9528.  
  9529. @Small_Header@<:#259,9360>Syntax
  9530.  
  9531. <:#202,9360><:f,QCourier,>S2I(str,base)<:f>
  9532.  
  9533. @Indent_List@<:#240,9360>    <:f,QCourier,>str<:f>    Any string expression to convert to integer format.
  9534.  
  9535. @Indent_List@<:#480,9360>    <:f,QCourier,>base<:f>    An integer expression with the number base (2 through 36) to convert from.
  9536.  
  9537. @Small_Header@<+@><:#259,9360>Return Type & Value
  9538.  
  9539. @Indent_List@<:#245,9360><+!>INTEGER<-!>    Returns str converted from the specified number base to an integer.
  9540.  
  9541. @Small_Header@<:#259,9360>Remarks
  9542.  
  9543. <:#1205,9360>People work with decimal (base 10) numbers, whereas computers work with binary (base 2) numbers.  It is often more convienient to store or input numbers in a format other than decimal for clarity, compactness, or other reasons.  This function will convert a
  9544.  string in any number base from 2 to 36 to a number.  So, <+!>S2I("1010",2)<-!> would return a 10; 
  9545. <+!>S2I("Z",36)<-!> would return 35.  For more information on number bases, consult 
  9546. <:N737425047,SDR,65535,4,1
  9547. Reference number base theory
  9548.  
  9549. >
  9550. .
  9551.  
  9552. @Small_Header@<:#259,9360>Examples
  9553.  
  9554. @Example_Text@<:#958,9360>INTEGER i<**>STRING  s<**>INPUTTEXT "Enter a string (any base)",s,@X0E,40<**>FOR i = 2 TO 36<**>  PRINTLN s," = ",<+!>S2I(s,i)<-!>," base ",i<**>NEXT
  9555.  
  9556. @Small_Header@<:#259,9360>See Also
  9557.  
  9558. <:#240,9360><+!>I2S() <+">Function<-"><-!><+!><-"><-"><-"><-">
  9559.  
  9560. <:p<* >>
  9561.  
  9562. @Subhead@<:#360,9360>SAVESCRN   <+">Statement<-">
  9563.  
  9564. @Small_Header@<:#259,9360>Function
  9565.  
  9566. <:#240,9360>Save the screen to a buffer for later restoration.
  9567.  
  9568. @Small_Header@<:#259,9360>Syntax
  9569.  
  9570. <:#202,9360><:f,QCourier,>SAVESCRN<:f>
  9571.  
  9572. @Indent_List@<:#240,9360>    No arguments are required
  9573.  
  9574. @Small_Header@<:#259,9360>Remark
  9575.  
  9576. <:#2175,9360>PCBoard will save and restore the screen before and after certain functions, such as SysOp chat.  This allows the user to continue right where he left off without having to remember what was on the screen before being interrupted.  You can add that same fun
  9577. ctionality with the <+!>SAVESCRN<-!> and <+!>RESTSCRN<-!> statements.  The 
  9578. <+!>SAVESCRN<-!> statement allocates memory for a buffer in which to save the screen.  If the 
  9579. <+!>SAVESCRN<-!> statement isn't followed by a <+!>RESTSCRN<-!> statement then that memory will never be deallocated.  Finally, this statement will work regardless of ANSI availability; this statement will only save the screen up to the position of the curs
  9580. or.  It is assumed that the screen can be safely restored using standard teletype conventions to just scroll the data onto the display.
  9581.  
  9582. @Small_Header@<:#259,9360>Examples
  9583.  
  9584. @Example_Text@<:#1580,9360><+!>SAVESCRN<-!><**>CLS<**>PRINTLN "We interrupt your regular BBS session"<**>PRINTLN "with this important message:"<**>NEWLINE<**>PRINTLN "A subscription to this system only costs $5!"<**>PRINTLN "Subscribe today!"<**>NEWLINES 2<**>WAIT<**>RESTSCRN
  9585.  
  9586. @Small_Header@<:#259,9360>See Also
  9587.  
  9588. <:#240,9360><-"><-"><-"><-"><-"><-"><-"><-"><+!>RESTSCRN <+">Statement<-"><-!><-"><-"><+!><-"><-"><-">
  9589.  
  9590. <:p<* >>
  9591.  
  9592. @Subhead@<:#360,9360>SCRTEXT()   <+">Function<-">
  9593.  
  9594. @Small_Header@<:#259,9360>Function
  9595.  
  9596. <:#240,9360>Access text and attribute information directly from BBS screen memory.
  9597.  
  9598. @Small_Header@<:#259,9360>Syntax
  9599.  
  9600. <:#202,9360><:f,QCourier,>SCRTEXT<:f><:f,QCourier,>(x,y,len,color)<:f>
  9601.  
  9602. @Indent_List@<:#480,9360>    <:f,QCourier,>x<:f>    An integer expression with the x coordinate (column) from which to read screen memory.
  9603.  
  9604. @Indent_List@<:#480,9360>    <:f,QCourier,>y<:f>    An integer expression with the y coordinate (row) from which to read screen memory.
  9605.  
  9606. @Indent_List@<:#480,9360>    <:f,QCourier,>len<:f>    An integer expression with the length, in columns, of the string to read from screen memory.
  9607.  
  9608. @Indent_List@<:#490,9360>    <:f,QCourier,>color<:f>    A boolean expression with <+!>TRUE<-!> if color information should be included, 
  9609. <+!>FALSE<-!> otherwise.
  9610.  
  9611. @Small_Header@<+@><:#259,9360>Return Type & Value
  9612.  
  9613. @Indent_List@<:#245,9360><+!>STRING<-!>    Returns the specified region of screen memory.
  9614.  
  9615. @Small_Header@<:#259,9360>Remarks
  9616.  
  9617. <:#1685,9360>This function is useful for temporarily saving a portion of screen memory, with or without color information.  If the color parameter is set to 
  9618. <+!>TRUE<-!> color information will be included in the form of @X codes embedded in the text.  Note that the maximum length of a string is 256 characters; however, a row of 80 characters could be as long as 400 characters (4 bytes for the @X code and 1 byte
  9619.  for the character itself).  You should generally limit yourself to a length of 51 characters or less if you want to include color information unless you are certain that attribute changes will not exceed the 256 character string limit.
  9620.  
  9621. @Small_Header@<:#259,9360>Examples
  9622.  
  9623. @Example_Text@<:#2064,9360>' scroll the screen to the left 5 columns and down 3 rows<**>INTEGER r<**>STRING  s<**>FOR r = 20 TO 1 STEP -1<**>  LET s = 
  9624. <+!>SCRTEXT(6,r,75,TRUE)<-!><**>  ANSIPOS 1,r+3<**>  CLREOL<**>  PRINT s<**>NEXT<**>FOR r = 1 TO 3<**>  ANSIPOS 1,r<**>  CLREOL<**>NEXT
  9625.  
  9626. @Small_Header@<:#259,9360>See Also
  9627.  
  9628. <:#240,9360><-"><-"><-"><-"><-"><-"><-"><-">
  9629.  
  9630. <:p<* >>
  9631.  
  9632. @Subhead@<:#360,9360>SEC   <+">Constant<-">
  9633.  
  9634. @Small_Header@<:#259,9360>Function
  9635.  
  9636. <:#245,9360>Set the security level specific file search flag in a <+!>DISPFILE 
  9637. <-!>statement.
  9638.  
  9639. @Small_Header@<:#259,9360>Value
  9640.  
  9641. <:#240,9360>2 = 10b = 2o = 2h
  9642.  
  9643. @Small_Header@<:#259,9360>Remarks
  9644.  
  9645. <:#970,9360>The <+!>DISPFILE<-!> statement will allow you to display a file to the user, and optionally to have PCBoard look for alternate security, graphics, and/or language specific files.  This flag instructs PCBoard to search for alternate security level files via 
  9646. the security level suffix.  The current security level may be obtained with the 
  9647. <+!>CURSEC<-!><+!>()<-!> function.
  9648.  
  9649. @Small_Header@<:#259,9360>Examples
  9650.  
  9651. @Example_Text@<:#484,9360>STRING s<**>DISPFILE "MNUA",<+!>SEC<-!>+GRAPH+LANG<**>INPUT "Option",s
  9652.  
  9653. @Small_Header@<:#259,9360>See Also
  9654.  
  9655. <+@><:#240,9360><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><+!>CURSEC() 
  9656. <+">Function<-">, <-!><+!>DISPFILE <+">Statement<-">, GRAPH <+">Constant<-">, LANG 
  9657. <+">Constant<-"><-!><-">
  9658.  
  9659. <:p<* >>
  9660.  
  9661. @Subhead@<:#360,9360>SEC()   <+">Function<-">
  9662.  
  9663. @Small_Header@<:#259,9360>Function
  9664.  
  9665. <:#240,9360>Extract the second of the minute from a specified time of day.
  9666.  
  9667. @Small_Header@<:#259,9360>Syntax
  9668.  
  9669. <:#202,9360><:f,QCourier,>SEC(texp)<:f>
  9670.  
  9671. @Indent_List@<:#240,9360>    <:f,QCourier,>texp<:f>    Any time expression.
  9672.  
  9673. @Small_Header@<+@><:#259,9360>Return Type & Value
  9674.  
  9675. @Indent_List@<:#485,9360><+!>INTEGER<-!>    Returns the second of the minute from the specified time expression (texp).  Valid return values are from 0 to 59.
  9676.  
  9677. @Small_Header@<:#259,9360>Remarks
  9678.  
  9679. <:#485,9360>This function allows you to extract a particular piece of information about a 
  9680. <+!>TIME<-!> value, in this case the second of the minute of the time of day expression.
  9681.  
  9682. @Small_Header@<:#259,9360>Examples
  9683.  
  9684. @Example_Text@<:#168,9360>PRINTLN "The minute is ",<+!>SEC(TIME())<-!>
  9685.  
  9686. @Small_Header@<:#259,9360>See Also
  9687.  
  9688. <:#240,9360><+!>HOUR() <+">Function<-">, MIN() <+">Function<-"><-!><+!><-"><-"><-"><-">
  9689.  
  9690. <:p<* >>
  9691.  
  9692. @Subhead@<+@><:#360,9360>SENDMODEM   <+">Statement<-">
  9693.  
  9694. @Small_Header@<:#259,9360>Function
  9695.  
  9696. <:#240,9360>Send a string to the modem.
  9697.  
  9698. @Small_Header@<:#259,9360>Syntax
  9699.  
  9700. <:#202,9360><:f,QCourier,>SENDMODEM str<:f>
  9701.  
  9702. @Indent_List@<:#240,9360>    <:f,QCourier,>str<:f>    A string expression to send to the modem.
  9703.  
  9704. @Small_Header@<:#259,9360>Remarks
  9705.  
  9706. <:#1440,9360>The primary use of this statement is to send commands to a modem when no one is online.  For example, you would use this to send a dial command to the modem in a call back PPL application.  However, it is not restricted to sending commands.  Note that modem
  9707.  commands must be terminated by a carriage return and that this statement will not automatically do it for you.  This allows you to send a command to the modem is several stages and only terminate the final stage with a carriage return.
  9708.  
  9709. @Small_Header@<:#259,9360>Examples
  9710.  
  9711. @Example_Text@<:#2054,9360>BOOLEAN flag<**>CDCHKOFF<**>KBDCHKOFF<**>DTROFF<**>DELAY 18<**>DTRON<+!><**>SENDMODEM "ATDT"<**>SENDMODEM "5551212"<**>SENDMODEM CHR(13)<-!><**>WAITFOR "CONNECT",flag,60<**>IF (!flag) LOG "No CONNECT after 60 seconds",FALSE<**>KBDCHKON<**>CDCHKON
  9712.  
  9713. @Small_Header@<:#259,9360>See Also
  9714.  
  9715. <:#240,9360><-"><-"><-"><-">
  9716.  
  9717. <:p<* >>
  9718.  
  9719. @Subhead@<+@><:#360,9360>SHELL   <+">Statement<-">
  9720.  
  9721. @Small_Header@<:#259,9360>Function
  9722.  
  9723. <:#240,9360>Shell out to a program or batch file.
  9724.  
  9725. @Small_Header@<:#259,9360>Syntax
  9726.  
  9727. <:#202,9360><:f,QCourier,>SHELL viacc,retcode,prog,cmds<:f>
  9728.  
  9729. @Indent_List@<:#490,9360>    <:f,QCourier,>viacc<:f>    A boolean expression with value <+!>TRUE<-!> if the shell should be made via COMMAND.COM; 
  9730. <+!>FALSE<-!> if it should be shelled to directly.
  9731.  
  9732. @Indent_List@<:#240,9360>    <:f,QCourier,>retcode<:f>    A variable in which to store the return code.
  9733.  
  9734. @Indent_List@<:#240,9360>    <:f,QCourier,>prog<:f>    A string expression with the file name to shell to.
  9735.  
  9736. @Indent_List@<:#240,9360>    <:f,QCourier,>cmds<:f>    A string expression with any arguments to pass to prog.
  9737.  
  9738. @Small_Header@<:#259,9360>Remarks
  9739.  
  9740. <:#1935,9360>You may have have need to run a COM, EXE or BAT file from your PPE.  You may need to do this to simulate running a DOOR or to access some service not normally available from PCBoard or PPL.  This function will allow you to do that.  If the viacc parameter i
  9741. s <+!>TRUE<-!> (you want COMMAND.COM to load the specified file) then your PATH environment variable will be searched for prog if it isn't in the current directory or isn't fully qualified (path and extension) as though you had entered it on the command lin
  9742. e.  If viacc is <+!>FALSE<-!> then you must specify the path and extension of the program to run.  Additionally, the retcode variable will only be meaningful if viacc is 
  9743. <+!>FALSE<-!>.
  9744.  
  9745. @Small_Header@<:#259,9360>Examples
  9746.  
  9747. @Example_Text@<:#1264,9360>INTEGER rc<+!><**>SHELL TRUE,rc,"DOOR",""<-!><**><**>INTEGER rc<**>STRING p,c<**>LET p = "DOORWAY.EXE"<**>LET c = "com2 /v:d^O /m:600 /g:on /o: /k:v0 /x: /c:dos"<+!><**>SHELL FALSE,rc,p,c<-!>
  9748.  
  9749. @Small_Header@<:#259,9360>See Also
  9750.  
  9751. <:#240,9360><-"><-"><-"><-">
  9752.  
  9753. <:p<* >>
  9754.  
  9755. @Subhead@<:#360,9360>SHOWOFF   <+">Statement<-">
  9756.  
  9757. @Small_Header@<:#259,9360>Function
  9758.  
  9759. <:#240,9360>Turn off showing information to the display.
  9760.  
  9761. @Small_Header@<:#259,9360>Syntax
  9762.  
  9763. <:#202,9360><:f,QCourier,>SHOWOFF<:f>
  9764.  
  9765. @Indent_List@<:#240,9360>    No arguments are required
  9766.  
  9767. @Small_Header@<:#259,9360>Remark
  9768.  
  9769. <:#1450,9360>This statement allows your PPL application to turn off writing information to the local and remote displays.  Used in conjunction with the 
  9770. <+!>SHOWSTAT()<-!> function and the <+!>OPENCAP<-!>, <+!>CLOSECAP<-!>, and 
  9771. <+!>SHOWON<-!> statements it allows you to temporarily turn off the display while capturing output to the screen.  This can be useful anytime you want to automate a feature for the user and allow them to download the resulting capture file instead of spendi
  9772. ng lots of time online.
  9773.  
  9774. @Small_Header@<:#259,9360>Examples
  9775.  
  9776. @Example_Text@<:#2222,9360>BOOLEAN ss<**>LET ss = SHOWSTAT()<+!><**>SHOWOFF<-!><**>OPENCAP "CAP"+STRING(PCBNODE()),ocFlag<**>IF (ocFlag) THEN<**>  DIR "U;NS"<**>  CLOSECAP<**>  KBDSTUFF "FLAG CAP"+STRING(PCBNODE())+CHR(13)<**>ENDIF<**>IF (ss) THEN<**>  SHOWON<**>ELSE<**>  
  9777. <+!>SHOWOFF<-!><**>ENDIF
  9778.  
  9779. @Small_Header@<:#259,9360>See Also
  9780.  
  9781. <:#476,9360><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><+!><-"><-">CLOSECAP 
  9782. <+">Statement<-">, OPENCAP <+">Statement<-">, SHOWON <+">Statement<-">, SHOWSTAT() 
  9783. <+">Function<-">
  9784.  
  9785. <:p<* >>
  9786.  
  9787. @Subhead@<:#360,9360>SHOWON   <+">Statement<-">
  9788.  
  9789. @Small_Header@<:#259,9360>Function
  9790.  
  9791. <:#240,9360>Turn on showing information to the display.
  9792.  
  9793. @Small_Header@<:#259,9360>Syntax
  9794.  
  9795. <:#202,9360><:f,QCourier,>SHOWON<:f>
  9796.  
  9797. @Indent_List@<:#240,9360>    No arguments are required
  9798.  
  9799. @Small_Header@<:#259,9360>Remark
  9800.  
  9801. <:#1450,9360>This statement allows your PPL application to turn on writing information to the local and remote displays.  Used in conjunction with the 
  9802. <+!>SHOWSTAT()<-!> function and the <+!>OPENCAP<-!>, <+!>CLOSECAP<-!>, and 
  9803. <+!>SHOWOFF<-!> statements it allows you to temporarily turn off the display while capturing output to the screen.  This can be useful anytime you want to automate a feature for the user and allow them to download the resulting capture file instead of spend
  9804. ing lots of time online.
  9805.  
  9806. @Small_Header@<:#259,9360>Examples
  9807.  
  9808. @Example_Text@<:#2222,9360>BOOLEAN ss<**>LET ss = SHOWSTAT()<**>SHOWOFF<**>OPENCAP "CAP"+STRING(PCBNODE()),ocFlag<**>IF (ocFlag) THEN<**>  DIR "U;NS"<**>  CLOSECAP<**>  KBDSTUFF "FLAG CAP"+STRING(PCBNODE())+CHR(13)<**>ENDIF<**>IF (ss) THEN<**>  
  9809. <+!>SHOWON<-!><**>ELSE<**>  SHOWOFF<**>ENDIF
  9810.  
  9811. @Small_Header@<:#259,9360>See Also
  9812.  
  9813. <:#476,9360><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><+!><-"><-">CLOSECAP 
  9814. <+">Statement<-">, OPENCAP <+">Statement<-">, SHOWOFF <+">Statement<-">, SHOWSTAT() 
  9815. <+">Function<-">
  9816.  
  9817. <:p<* >>
  9818.  
  9819. @Subhead@<:#360,9360>SHOWSTAT() <+">  Function<-">
  9820.  
  9821. @Small_Header@<:#259,9360>Function
  9822.  
  9823. <:#240,9360>Determine if data is being shown on the display.
  9824.  
  9825. @Small_Header@<:#259,9360>Syntax
  9826.  
  9827. <:#202,9360><:f,QCourier,>SHOWSTAT<:f><:f,QCourier,>()<:f>
  9828.  
  9829. @Indent_List@<:#240,9360>    No arguments are required
  9830.  
  9831. @Small_Header@<:#259,9360>Return Type and Value
  9832.  
  9833. @Indent_List@<:#245,9360><+!>BOOLEAN<-!>    Returns <+!>TRUE<-!> if data is being shown on the display, 
  9834. <+!>FALSE<-!> otherwise.
  9835.  
  9836. @Small_Header@<:#259,9360>Remarks
  9837.  
  9838. <:#1450,9360>This function allows your PPL application to determine the status of writing information to the local and remote displays.  Used in conjunction with the 
  9839. <+!>OPENCAP<-!>, <+!>CLOSECAP<-!>, <+!>SHOWON<-!>, and <+!>SHOWOFF<-!> statements it allows you to temporarily turn off the display while capturing output to the screen.  This can be useful anytime you want to automate a feature for the user and allow them 
  9840. to download the resulting capture file instead of spending lots of time online.
  9841.  
  9842. @Small_Header@<:#259,9360>Examples
  9843.  
  9844. @Example_Text@<:#2222,9360>BOOLEAN ss<**>LET ss = <+!>SHOWSTAT()<-!><**>SHOWOFF<**>OPENCAP "CAP"+STRING(PCBNODE()),ocFlag<**>IF (ocFlag) THEN<**>  DIR "U;NS"<**>  CLOSECAP<**>  KBDSTUFF "FLAG CAP"+STRING(PCBNODE())+CHR(13)<**>ENDIF<**>IF (ss) THEN<**>  SHOWON<**>ELSE<**>  SHOWOFF<**>
  9845. ENDIF
  9846.  
  9847. @Small_Header@<:#259,9360>See Also
  9848.  
  9849. <:#476,9360><-"><-"><+!>CLOSECAP <+">Statement<-">, OPENCAP <+">Statement<-">, SHOWOFF 
  9850. <+">Statement<-!><-"><+!><-">, SHOWON <+">Statement<-!><-"><-"><-">
  9851.  
  9852. <:p<* >>
  9853.  
  9854. @Subhead@<:#360,9360>SLPATH()   <+">Function<-">
  9855.  
  9856. @Small_Header@<:#259,9360>Function
  9857.  
  9858. <:#240,9360>Return the path of login security files as defined in PCBSetup.
  9859.  
  9860. @Small_Header@<:#259,9360>Syntax
  9861.  
  9862. <:#202,9360><:f,QCourier,>SL<:f><:f,QCourier,>PATH<:f><:f,QCourier,>(<:f><:f,QCourier,>)<:f>
  9863.  
  9864. @Indent_List@<:#240,9360>    No arguments are required
  9865.  
  9866. @Small_Header@<:#259,9360>Return Type & Value
  9867.  
  9868. @Indent_List@<:#245,9360><+!>STRING<-!>    Returns the path of the PCBoard login security files.
  9869.  
  9870. @Small_Header@<:#259,9360>Remarks
  9871.  
  9872. <:#480,9360>This function will return the path where login security files are located as defined in PCBSetup.  It can be used to create and change them on the fly.
  9873.  
  9874. @Small_Header@<:#259,9360>Examples
  9875.  
  9876. @Example_Text@<:#484,9360>FAPPEND 1,<+!>SLPATH()<-!>+STRING(CURSEC),O_WR,S_DB<**>FPUTLN 1,U_NAME()<**>FCLOSE 1
  9877.  
  9878. @Small_Header@<:#259,9360>See Also
  9879.  
  9880. <:#240,9360><-"><-"><-"><-">
  9881.  
  9882. <:p<* >>
  9883.  
  9884. @Subhead@<+@><:#360,9360>SOUND   <+">Statement<-">
  9885.  
  9886. @Small_Header@<:#259,9360>Function
  9887.  
  9888. <:#240,9360>Turn on the speaker on the local computer at a specific frequency.
  9889.  
  9890. @Small_Header@<:#259,9360>Syntax
  9891.  
  9892. <:#202,9360><:f,QCourier,>SOUND freq<:f>
  9893.  
  9894. @Indent_List@<:#480,9360>    <:f,QCourier,>freq<:f>    An integer expression with the frequency (in hertz) at which to turn on the speaker or 0 to turn off the speaker.
  9895.  
  9896. @Small_Header@<:#259,9360>Remarks
  9897.  
  9898. <:#1200,9360>This statement can be used to generate just about any tone desired on the speaker on the local PC.  It has no effect on the remote computer and will only work with the built in speaker (in other words, it has no way of communicating with advanced sound card
  9899. s).  You specify the frequency of the tone you wish to generate in hertz and pass it to the statement, or pass 0 to turn off the speaker.
  9900.  
  9901. @Small_Header@<:#259,9360>Examples
  9902.  
  9903. @Example_Text@<:#2054,9360>PAGEON<**>FOR i = 1 TO 10<**>  MPRINT CHR(7)<+!><**>  SOUND 440<-!><**>  DELAY 9<+!><**>  SOUND 0<-!><**>  DELAY 9<**>  IF (KINKEY() = " ") THEN<**>    CHAT<**>    GOTO exit<**>  ENDIF<**>NEXT<**>:exit
  9904.  
  9905. @Small_Header@<:#259,9360>See Also
  9906.  
  9907. <:#240,9360><-"><-"><-"><-">
  9908.  
  9909. <:p<* >>
  9910.  
  9911. @Subhead@<:#360,9360>SPACE()   <+">Function<-">
  9912.  
  9913. @Small_Header@<:#259,9360>Function
  9914.  
  9915. <:#240,9360>Create a string with a specified of spaces.
  9916.  
  9917. @Small_Header@<:#259,9360>Syntax
  9918.  
  9919. <:#202,9360><:f,QCourier,>SPACE<:f><:f,QCourier,>(len)<:f>
  9920.  
  9921. @Indent_List@<:#240,9360>    <:f,QCourier,>len<:f>    An integer expression with the number of spaces for the new string.
  9922.  
  9923. @Small_Header@<+@><:#259,9360>Return Type & Value
  9924.  
  9925. @Indent_List@<:#245,9360><+!>STRING<-!>    Returns a string of len spaces.
  9926.  
  9927. @Small_Header@<:#259,9360>Remarks
  9928.  
  9929. <:#720,9360>This function is useful when formatting screen displays without ANSI and when writing formatted information out to a file.  It will create a string of the length specified with nothing but spaces.  The returned string may have anywhere from 0 to 256 spaces.
  9930.  
  9931. @Small_Header@<:#259,9360>Examples
  9932.  
  9933. @Example_Text@<:#810,9360>PRINT RANDOM(9),<+!>SPACE(5)<-!>,RANDOM(9),<+!>SPACE(5)<-!>,RANDOM(9)<**><**>FCREATE 1,"NEWFILE.DAT",O_WR,S_DB<**>FPUTLN 1,"NAME",<+!>SPACE(24)<-!>,"CITY",<+!>SPACE(23)<-!>,"PHONE"<**>FCLOSE 1
  9934.  
  9935. @Small_Header@<:#259,9360><-"><-"><-"><-">See Also
  9936.  
  9937. <:#240,9360>
  9938.  
  9939. <:p<* >>
  9940.  
  9941. @Subhead@<:#360,9360>SPRINT/SPRINTLN   <+">Statements<-">
  9942.  
  9943. @Small_Header@<:#259,9360>Function
  9944.  
  9945. <:#240,9360>Print (write) a line to the local screen (BBS) only (with an optional newline appended)<*7><*7>.
  9946.  
  9947. @Small_Header@<:#259,9360>Syntax
  9948.  
  9949. <:#606,9360><:f,QCourier,>SPRINT<:f><:f,QCourier,> exp<[>,exp]<:f><:f,QCourier,><**>-or-<**>SPRINTLN<:f><:f,QCourier,> <[>exp<[>,exp]]<:f>
  9950.  
  9951. @Indent_List@<:#240,9360>    <:f,QCourier,>exp<:f>    An expression of any type to evaluate and write to the caller's screen.
  9952.  
  9953. @Small_Header@<:#259,9360>Remarks
  9954.  
  9955. <:#1455,9360>These statements will evalutate zero, one or more expressions of any type and write the results to the BBS for the SysOp's display.  The 
  9956. <+!>SPRINTLN<-!> statement will append a newline to the end of the expressions; 
  9957. <+!>SPRINT<-!> will not.  Note that at least one expression must be specified for 
  9958. <+!>SPRINT<-!>, unlike the <+!>SPRINTLN<-!> statement which need not have any arguments passed to it.  These statements only send information to the local display and do not interpret @ codes; however, complete ANSI sequences will be interpreted.
  9959.  
  9960. @Small_Header@<:#259,9360>Examples
  9961.  
  9962. @Example_Text@<:#948,9360><+!>SPRINT "The name of the currently running PPE file is "<**>SPRINTLN PPENAME(),"."<**>SPRINT "The path where it is located is "<**>SPRINTLN PPEPATH(),"."<**>SPRINT "The date is ",DATE()," and the time is ",TIME(),"."<**>SPRINTLN<-!>
  9963.  
  9964. @Small_Header@<:#259,9360>See Also
  9965.  
  9966. <:#240,9360><-"><-"><-"><-"><+!>MPRINT/MPRINTLN <+">Statements<-">, PRINT/PRINTLN 
  9967. <+">Statements<-"><-!><-">
  9968.  
  9969. <:p<* >>
  9970.  
  9971. @Subhead@<:#360,9360>STACKED   <+">Constant<-">
  9972.  
  9973. @Small_Header@<:#259,9360>Function
  9974.  
  9975. <:#245,9360>Set the allow stacked commands flag in an <+!>INPUTSTR<-!> or <+!>PROMPTSTR<-!> statement.
  9976.  
  9977. @Small_Header@<:#259,9360>Value
  9978.  
  9979. <:#240,9360>16 = 10000b = 20o = 10h
  9980.  
  9981. @Small_Header@<:#259,9360>Remarks
  9982.  
  9983. <+C><:#1205,9360>The <+!>INPUTSTR<-!> and <+!>PROMPTSTR<-!> statements have the ability to allow space and semi-colon characters to be input independent of the valid character string specified.  This facilitates entering stacked commands (commands separated by space or semi
  9984. -colon delimiters) by only requiring a single value be set in the input statement instead of having to add " ;" to every valid character mask.
  9985.  
  9986. @Small_Header@<:#259,9360>Examples
  9987.  
  9988. @Example_Text@<:#958,9360>STRING cmds<**>INPUTSTR "Commands",cmds,@X0E,60,MASK_ASCII(),<+!>STACKED<-!><**>TOKENIZE cmds<**>LET cmds = GETTOKEN()<**>IF (cmds = "QUIT") END<**>KBDSTUFF cmds+TOKENSTR()
  9989.  
  9990. @Small_Header@<:#259,9360>See Also
  9991.  
  9992. <:#240,9360><-"><-"><-"><-"><+!>INPUTSTR <+">Statement<-">, <-!><-"><-"><+!>PROMPTSTR 
  9993. <+">Statement<-"><-!><-"><-"><-"><-"><-">
  9994.  
  9995. <:p<* >>
  9996.  
  9997. @Subhead@<+@><:#360,9360>STARTDISP   <+">Statement<-">
  9998.  
  9999. @Small_Header@<:#259,9360>Function
  10000.  
  10001. <:#240,9360>Start PCBoard's display routines in a specified mode.
  10002.  
  10003. @Small_Header@<:#259,9360>Syntax
  10004.  
  10005. <:#202,9360><:f,QCourier,>STARTDISP mode<:f>
  10006.  
  10007. @Indent_List@<:#240,9360>    <:f,QCourier,>mode<:f>    An integer expression with the mode for display.
  10008.  
  10009. @Small_Header@<:#259,9360>Remarks
  10010.  
  10011. <:#1695,9360>PCBoard has two modes for displaying information:  non stop and line count.  Non stop mode (initiated by passing 
  10012. <+!>FNS<-!>, for Force Non Stop, as the mode parameter) displays information without regard to how fast the display is or whether or not the user can read it all.  Line count mode (initiated by passing 
  10013. <+!>FCL<-!>, for Force Count Lines, as the mode parameter) displays information while counting lines and pausing after every screenful to wait for user input.  Finally, 
  10014. <+!>NC<-!></`>may be specified to reinitialize the internal display counters without changing the current mode.
  10015.  
  10016. @Small_Header@<:#259,9360>Examples
  10017.  
  10018. @Example_Text@<:#1896,9360><+!>STARTDISP FCL<-!><**>FOR i = 1 TO 100<**>  PRINTLN "Line ",i<**>NEXT<**><+!>STARTDISP FNS<-!><**>FOR i = 1 TO 100<**>  PRINTLN "Line ",i<**>NEXT<**><+!>STARTDISP NC<-!><**>FOR i = 1 TO 100<**>  PRINTLN "Line ",i<**>NEXT
  10019.  
  10020. @Small_Header@<:#259,9360>See Also
  10021.  
  10022. <:#240,9360><-"><-"><-"><-"><+!>ABORT() <+">Function<-">, RESETDISP <+">Statement<-"><-!>
  10023.  
  10024. <:p<* >>
  10025.  
  10026. @Subhead@<+@><:#360,9360>STOP   <+">Statement<-">
  10027.  
  10028. @Small_Header@<:#259,9360>Function
  10029.  
  10030. <:#240,9360>Abort PPE execution.
  10031.  
  10032. @Small_Header@<:#259,9360>Syntax
  10033.  
  10034. <:#202,9360><:f,QCourier,>STOP<:f>
  10035.  
  10036. @Indent_List@<:#240,9360>    No arguments are required
  10037.  
  10038. @Small_Header@<:#259,9360>Remarks
  10039.  
  10040. <:#970,9360>This statement may be used to abnormally terminate PPE execution at any point.  The only real difference between this statement and 
  10041. <+!>END<-!> is whether or not information written to channel 0 is saved when the .  
  10042. <+!>END<-!> will save the output to the script answer file; <+!>STOP<-!> will not.
  10043.  
  10044. @Small_Header@<:#259,9360>Examples
  10045.  
  10046. @Example_Text@<:#2380,9360>STRING Question, Answer<**>LET Question = "What is your street address ..."<**>GOSUB ask<**>INPUTYN "Save address",Answer,@X0E<**>IF (Answer = NOCHAR()) 
  10047. <+!>STOP<-!><**>END<**><**>:ask ' Sub to ask a question, get an answer, and log them to a file<**>LET Answer = ""<**>PRINTLN "@X0E",Question<**>INPUT "",Answer<**>NEWLINES 2<**>FPUTLN 0,"Q: ",STRIPATX(Question)<**>FPUTLN 0,"A: ",Answer<**>RETURN
  10048.  
  10049. @Small_Header@<:#259,9360>See Also
  10050.  
  10051. <:#240,9360><+!>END <+">Statement<-">, RETURN <+">Statement<-"><-!>
  10052.  
  10053. <:p<* >>
  10054.  
  10055. @Subhead@<:#360,9360>STRING   <+">Type<-">
  10056.  
  10057. @Small_Header@<:#259,9360>Function
  10058.  
  10059. <:#240,9360>Declare one or more variables of type string.
  10060.  
  10061. @Small_Header@<:#259,9360>Syntax
  10062.  
  10063. <:#202,9360><:f200,QCourier,>STRING var|arr(s<[>,s<[>,s]])<[>,var|arr(s<[>,s<[>,s]])]<:f>
  10064.  
  10065. @Indent_List@<:#720,9360>    <:f,QCourier,>var<:f>    The name of a variable to declare.  Must start with a letter <[>A-Z] which may be followed by letters, digits <[>0-9] or the underscore <[>_].  May be of any length but only the first 32 characters are used.
  10066.  
  10067. @Indent_List@<:#480,9360>    <:f,QCourier,>arr<:f>    The name of an array variable to declare.  The same naming conventions as var are used.
  10068.  
  10069. @Indent_List@<:#480,9360>    <:f,QCourier,>s<:f>    The size (0-based) of an array variable dimension.  Any constant integer expression is allowed.
  10070.  
  10071. @Small_Header@<:#259,9360>Remarks
  10072.  
  10073. <:#2185,9360><+!>STRING<-!> variables are stored as pointers arrays of characters from 0 to 257 bytes in size.  If the array has 0 or 1 characters in it, it is a 0 length string.  Arrays with 2 to 257 characters have a length of the array size minus one.  Valid string c
  10074. haracters are ASCII 1 through ASCII 255.  ASCII 0 is reserved for terminating the string and may not appear in the middle of the string.  A 
  10075. <+!>STRING<-!> assignment to an <+!>INTEGER<-!> will convert the string to the four byte binary integer value (similar to BASIC's VAL function and C's atol function).  An 
  10076. <+!>INTEGER<-!> to <+!>STRING<-!> assignment will result in a string with the representation of the number (similar to BASIC's STR$ function and C's ltoa function).  If a 
  10077. <+!>STRING<-!> is assigned to or from any other type, an appropriate conversion is performed automatically by PPL.
  10078.  
  10079. @Small_Header@<:#259,9360>Examples
  10080.  
  10081. @Example_Text@<:#158,9360><+!>STRING char, str, tmp, labels(10), names(20,3)<-!>
  10082.  
  10083. @Small_Header@<:#259,9360>See Also
  10084.  
  10085. <:#240,9360><+!>BOOLEAN <+">Type<-">, DATE <+">Type<-">, INTEGER <+">Type<-">, MONEY 
  10086. <+">Type<-">, TIME <+">Type<-!><-">
  10087.  
  10088. <:p<* >>
  10089.  
  10090. @Subhead@<:#360,9360>STRING()   <+">Function<-">
  10091.  
  10092. @Small_Header@<:#259,9360>Function
  10093.  
  10094. <:#240,9360>Convert any expression to a string.
  10095.  
  10096. @Small_Header@<:#259,9360>Syntax
  10097.  
  10098. <:#202,9360><:f,QCourier,>STRING<:f><:f,QCourier,>(exp)<:f>
  10099.  
  10100. @Indent_List@<:#240,9360>    <:f,QCourier,>exp<:f>    Any expression.
  10101.  
  10102. @Small_Header@<+@><:#259,9360>Return Type & Value
  10103.  
  10104. @Indent_List@<:#245,9360><+!>STRING<-!>    Returns exp formatted as a string.
  10105.  
  10106. @Small_Header@<:#259,9360>Remarks
  10107.  
  10108. <:#2400,9360>This function is immensely useful anytime you need to convert any expression to string format.  For example, to append an integer value to the end of a string without this function, you would need to assign the integer to a string and then append the tempor
  10109. ary string to actual string.  This is because PPL's normal course of action when performing arithmetic with incompatible types is to convert everything to integer first.  With this function, you can accomplish the same function in one line of code with one 
  10110. expression because you are forcing addition of compatible types (strings).  Note that PPL does automatically convert incompatible types whenever possible, making this function unnecessary in many cases.  This function should only be necessary when trying to
  10111.  append the text representation of a non-string type to a string via the + operator.
  10112.  
  10113. @Small_Header@<:#259,9360>Examples
  10114.  
  10115. @Example_Text@<:#1610,9360>INTEGER i<**>STRING  s(5)<**>FOR i = 1 to 5<**>  LET s(i) = "This is string "+<+!>STRING(i)<-!><**>NEXT<**><**>STRING s<**>LET s = 
  10116. <+!>STRING(ABORT())<-!>+" "+<+!>STRING(DATE())<-!>+" "+<+!>STRING(10)<-!>+" "<**>LET s = s+<+!>STRING($10.00)<-!>+" "+<+!>STRING(TIME())<-!><**>PRINTLN s ' will print "0 10-31-67 10 $10.00 03:27:00" (or similar)
  10117.  
  10118. @Small_Header@<:#259,9360><-"><-"><-"><-">See Also
  10119.  
  10120. <:#240,9360>
  10121.  
  10122. <:p<* >>
  10123.  
  10124. @Subhead@<:#360,9360>STRIP()   <+">Function<-">
  10125.  
  10126. @Small_Header@<:#259,9360>Function
  10127.  
  10128. <:#240,9360>Remove all occurrences of a character from a string.
  10129.  
  10130. @Small_Header@<:#259,9360>Syntax
  10131.  
  10132. <:#202,9360><:f,QCourier,>STRIP<:f><:f,QCourier,>(str,ch)<:f>
  10133.  
  10134. @Indent_List@<:#240,9360>    <:f,QCourier,>str<:f>    Any string expression.
  10135.  
  10136. @Indent_List@<:#240,9360>    <:f,QCourier,>ch<:f>    String with character to remove from str.
  10137.  
  10138. @Small_Header@<+@><:#259,9360>Return Type & Value
  10139.  
  10140. @Indent_List@<:#485,9360><+!>STRING<-!>    Returns sexp without occurrences of ch that may have been present previously.
  10141.  
  10142. @Small_Header@<:#259,9360>Remarks
  10143.  
  10144. <:#720,9360>This function is used to strip a selected character from a string.  This can be useful when you need to remove known formatting characters from a string, such as slashes and hyphens from a date string.
  10145.  
  10146. @Small_Header@<:#259,9360>Examples
  10147.  
  10148. @Example_Text@<:#958,9360>STRING s<**>WHILE (LEN(s) << 6) DO<**>  INPUTSTR "Enter date (MM-DD-YY)",s,@X0E,8,"0123456789-",DEFS<**>  LET s = 
  10149. <+!>STRIP(s,"-")<-!><**>ENDWHILE<**>PRINTLN "Date (MMDDYY):  ",s
  10150.  
  10151. @Small_Header@<:#259,9360><-"><-"><-"><-">See Also
  10152.  
  10153. <:#240,9360>
  10154.  
  10155. <:p<* >>
  10156.  
  10157. @Subhead@<:#360,9360>STRIPATX()   <+">Function<-">
  10158.  
  10159. @Small_Header@<:#259,9360>Function
  10160.  
  10161. <:#240,9360>Remove @X codes from a string.
  10162.  
  10163. @Small_Header@<:#259,9360>Syntax
  10164.  
  10165. <:#202,9360><:f,QCourier,>STRIPATX<:f><:f,QCourier,>(sexp)<:f>
  10166.  
  10167. @Indent_List@<:#240,9360>    <:f,QCourier,>sexp<:f>    Any string expression.
  10168.  
  10169. @Small_Header@<+@><:#259,9360>Return Type & Value
  10170.  
  10171. @Indent_List@<:#485,9360><+!>STRING<-!>    Returns sexp without any @X codes that may have been present previously.
  10172.  
  10173. @Small_Header@<:#259,9360>Remarks
  10174.  
  10175. <:#720,9360>This function is used to strip PCBoard @X color codes from a string or string expression.  This is useful when you want to log information to a file without the @X codes used in the screen display.
  10176.  
  10177. @Small_Header@<:#259,9360>Examples
  10178.  
  10179. @Example_Text@<:#1896,9360>STRING Question, Answer<**>LET Question = "What is your street address ..."<**>GOSUB ask<**>END<**>:ask ' Sub to ask a question, get an answer, and log them to a file<**>LET Answer = ""<**>PRINTLN "@X0E",Question<**>INPUT "",Answer<**>NEWLINES 2<**>FPUTLN 0
  10180. ,"Q: ",STRIPATX(Question)<**>FPUTLN 0,"A: ",Answer<**>RETURN
  10181.  
  10182. @Small_Header@<:#259,9360><-"><-"><-"><-">See Also
  10183.  
  10184. <:#240,9360>
  10185.  
  10186. <:p<* >>
  10187.  
  10188. @Subhead@<:#360,9360>SYSOPSEC()   <+">Function<-">
  10189.  
  10190. @Small_Header@<:#259,9360>Function
  10191.  
  10192. <:#240,9360>Get the security level as the SysOp security level.
  10193.  
  10194. @Small_Header@<:#259,9360>Syntax
  10195.  
  10196. <:#202,9360><:f,QCourier,>SYSOPSEC<:f><:f,QCourier,>(<:f><:f,QCourier,>)<:f>
  10197.  
  10198. @Indent_List@<:#240,9360>    No arguments are required
  10199.  
  10200. @Small_Header@<:#259,9360>Return Type & Value
  10201.  
  10202. @Indent_List@<:#245,9360><+!>INTEGER<-!>    Returns the SysOp security level as defined in PCBSetup.
  10203.  
  10204. @Small_Header@<:#259,9360>Remarks
  10205.  
  10206. <:#720,9360>This function is useful for those occasions when you need to limit functionality in your PPL applications to users having a security level greater than or equal to the defined SysOp security level in PCBSetup.
  10207.  
  10208. @Small_Header@<:#259,9360>Examples
  10209.  
  10210. @Example_Text@<:#1274,9360>INTEGER min<**>IF (CURSEC() <;>= <+!>SYSOPSEC()<-!>) THEN<**>  LET min = 60<**>ELSE<**>  LET min = 5<**>ENDIF<**>ADJTIME min<**>PRINTLN "Your time available has been increased by ",min," minutes"
  10211.  
  10212. @Small_Header@<:#259,9360>See Also
  10213.  
  10214. <:#240,9360><-"><-"><-">
  10215.  
  10216. <:p<* >>
  10217.  
  10218. @Subhead@<:#360,9360>S_DB   <+">Constant<-">
  10219.  
  10220. @Small_Header@<:#259,9360>Function
  10221.  
  10222. <:#245,9360>Set the share deny both (read and write) flag in a <+!>FCREATE<-!>/<+!>FOPEN<-!>/<+!>FAPPEND<-!> statement.
  10223.  
  10224. @Small_Header@<:#259,9360>Value
  10225.  
  10226. <:#240,9360>3 = 11b = 3o = 3h
  10227.  
  10228. @Small_Header@<:#259,9360>Remarks
  10229.  
  10230. <:#1200,9360>DOS 3.1 or later (which is what is required by PCBoard) allows processes to decide what mode of file sharing should be allowed.  This constant allows you to specify that other processes may not open the same file for either read or write access from the tim
  10231. e you open the file to the time you close the file.  This is useful when you need exclusive access to a file for any reason and need to restrict other processes access to the same file.
  10232.  
  10233. @Small_Header@<:#259,9360>Examples
  10234.  
  10235. @Example_Text@<:#958,9360>FOPEN 1,"FILE.DAT",O_RD,<+!>S_DB<-!> ' Deny other processes all access<**>FOR i = 1 TO 10<**>  FGET 1,s<**>  PRINTLN s<**>NEXT<**>FCLOSE 1 ' Close the file and allow others to open it in any mode
  10236.  
  10237. @Small_Header@<:#259,9360>See Also
  10238.  
  10239. <:#240,9360><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><+!>S_DN <+">Constant<-">, S_DR 
  10240. <+">Constant<-">, S_DW <+">Constant<-!><-">
  10241.  
  10242. <:p<* >>
  10243.  
  10244. @Subhead@<:#360,9360>S_DN   <+">Constant<-">
  10245.  
  10246. @Small_Header@<:#259,9360>Function
  10247.  
  10248. <:#245,9360>Set the share deny none flag in a <+!>FCREATE<-!>/<+!>FOPEN<-!>/<+!>FAPPEND<-!> statement.
  10249.  
  10250. @Small_Header@<:#259,9360>Value
  10251.  
  10252. <:#240,9360>0 = 0b = 0o = 0h
  10253.  
  10254. @Small_Header@<:#259,9360>Remarks
  10255.  
  10256. <:#1200,9360>DOS 3.1 or later (which is what is required by PCBoard) allows processes to decide what mode of file sharing should be allowed.  This constant allows you to specify that other processes may open the same file for read or write access from the time you open 
  10257. the file to the time you close the file.  This is useful when you don't need exclusive access to a file for any reason and need not restrict other processes.
  10258.  
  10259. @Small_Header@<:#259,9360>Examples
  10260.  
  10261. @Example_Text@<:#958,9360>FOPEN 1,"FILE.DAT",O_RD,<+!>S_DN<-!> ' Do not deny other processes any access<**>FOR i = 1 TO 10<**>  FGET 1,s<**>  PRINTLN s<**>NEXT<**>FCLOSE 1 ' Close the file and allow others to open it in any mode
  10262.  
  10263. @Small_Header@<:#259,9360>See Also
  10264.  
  10265. <:#240,9360><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><+!>S_DB <+">Constant<-">, S_DR 
  10266. <+">Constant<-">, S_DW <+">Constant<-!><-">
  10267.  
  10268. <:p<* >>
  10269.  
  10270. @Subhead@<:#360,9360>S_DR   <+">Constant<-">
  10271.  
  10272. @Small_Header@<:#259,9360>Function
  10273.  
  10274. <:#245,9360>Set the share deny read flag in a <+!>FCREATE<-!>/<+!>FOPEN<-!>/<+!>FAPPEND<-!> statement.
  10275.  
  10276. @Small_Header@<:#259,9360>Value
  10277.  
  10278. <:#240,9360>1 = 1b = 1o = 1h
  10279.  
  10280. @Small_Header@<:#259,9360>Remarks
  10281.  
  10282. <:#960,9360>DOS 3.1 or later (which is what is required by PCBoard) allows processes to decide what mode of file sharing should be allowed.  This constant allows you to specify that other processes may open the same file, but that they may not open it for read access, 
  10283. from the time you open the file to the time you close the file.
  10284.  
  10285. @Small_Header@<:#259,9360>Examples
  10286.  
  10287. @Example_Text@<:#958,9360>FOPEN 1,"FILE.DAT",O_RD,<+!>S_DR<-!> ' Deny other processes read access<**>FOR i = 1 TO 10<**>  FGET 1,s<**>  PRINTLN s<**>NEXT<**>FCLOSE 1 ' Close the file and allow others to open it in any mode
  10288.  
  10289. @Small_Header@<:#259,9360>See Also
  10290.  
  10291. <:#240,9360><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><-"><+!>S_DB <+">Constant<-">, S_DN 
  10292. <+">Constant<-">, S_DW <+">Constant<-!><-">
  10293.  
  10294. <:p<* >>
  10295.  
  10296. @Subhead@<:#360,9360>S_DW   <+">Constant<-">
  10297.  
  10298. @Small_Header@<:#259,9360>Function
  10299.  
  10300. <:#245,9360>Set the share deny write flag in a <+!>FCREATE<-!>/<+!>FOPEN<-!>/<+!>FAPPEND<-!> statement.
  10301.  
  10302. @Small_Header@<:#259,9360>Value
  10303.  
  10304. <:#240,9360>2 = 10b = 2o = 2h
  10305.  
  10306. @Small_Header@<:#259,9360>Remarks
  10307.  
  10308. <:#1200,9360>DOS 3.1 or later (which is what is required by PCBoard) allows processes to decide what mode of file sharing should be allowed.  This constant allows you to specify that other processes may open the same file, but that they may not open it for write access,
  10309.  from the time you open the file to the time you close the file.  This is useful when you want to ensure that data will not change while you are reading it.
  10310.  
  10311. @Small_Header@<:#259,9360>Examples
  10312.  
  10313. @Example_Text@<:#958,9360>FOPEN 1,"FILE.DAT",O_RD,<+!>S_DW<-!> ' Deny other processes write access<**>FOR i = 1 TO 10<**>  FGET 1,s<**>  PRINTLN s<**>NEXT<**>FCLOSE 1 ' Close the file and allow others to open it in any mode
  10314.  
  10315. @Small_Header@<:#259,9360>See Also
  10316.  
  10317. <:#240,9360><-"><-"><-"><-"><-"><-"><-"><+!>S_DB <+">Constant<-">, S_DN <+">Constant<-">, S_DR 
  10318. <+">Constant<-"><-!>
  10319.  
  10320. <:p<* >>
  10321.  
  10322. @Subhead@<:#360,9360>TEMPPATH()   <+">Function<-">
  10323.  
  10324. @Small_Header@<:#259,9360>Function
  10325.  
  10326. <:#240,9360>Return the path to the temporary work directory as defined in PCBSetup.
  10327.  
  10328. @Small_Header@<:#259,9360>Syntax
  10329.  
  10330. <:#202,9360><:f,QCourier,>TEMP<:f><:f,QCourier,>PATH<:f><:f,QCourier,>(<:f><:f,QCourier,>)<:f>
  10331.  
  10332. @Indent_List@<:#240,9360>    No arguments are required
  10333.  
  10334. @Small_Header@<:#259,9360>Return Type & Value
  10335.  
  10336. @Indent_List@<:#245,9360><+!>STRING<-!>    Returns the path of the node temporary work files area.
  10337.  
  10338. @Small_Header@<:#259,9360>Remarks
  10339.  
  10340. <:#720,9360>This function will return the path where temporary work files should be created as defined in PCBSetup.  This path is a good place for small temporary files that need not be kept permanently since it often points to a RAM drive or other fast local storage.
  10341.  
  10342. @Small_Header@<:#259,9360>Examples
  10343.  
  10344. @Example_Text@<:#662,9360>INTEGER rc<**>SHELL TRUE,rc,"DIR","<;>"+<+!>TEMPPATH()<-!>+"TMPDIR"<**>DISPFILE 
  10345. <+!>TEMPPATH()<-!>+"TMPDIR",DEFS<**>DELETE <+!>TEMPPATH()<-!>+"TMPDIR"
  10346.  
  10347. @Small_Header@<:#259,9360>See Also
  10348.  
  10349. <:#240,9360><-"><-"><-"><-">
  10350.  
  10351. <:p<* >>
  10352.  
  10353. @Subhead@<:#360,9360>TIME   <+">Type<-">
  10354.  
  10355. @Small_Header@<:#259,9360>Function
  10356.  
  10357. <:#240,9360>Declare one or more variables of type time.
  10358.  
  10359. @Small_Header@<:#259,9360>Syntax
  10360.  
  10361. <:#202,9360><:f200,QCourier,>TIME var|arr(s<[>,s<[>,s]])<[>,var|arr(s<[>,s<[>,s]])]
  10362.  
  10363. @Indent_List@<:#720,9360>    <:f,QCourier,>var<:f>    The name of a variable to declare.  Must start with a letter <[>A-Z] which may be followed by letters, digits <[>0-9] or the underscore <[>_].  May be of any length but only the first 32 characters are used.
  10364.  
  10365. @Indent_List@<:#480,9360>    <:f,QCourier,>arr<:f>    The name of an array variable to declare.  The same naming conventions as var are used.
  10366.  
  10367. @Indent_List@<:#480,9360>    <:f,QCourier,>s<:f>    The size (0-based) of an array variable dimension.  Any constant integer expression is allowed.
  10368.  
  10369. @Small_Header@<:#259,9360>Remarks
  10370.  
  10371. <:#2430,9360><+!>TIME<-!> variables are stored as seconds elapsed since midnight.  Valid times are 0 (00:00:00) through  86399 (23:59:59).  It is stored internally as a four byte unsigned long integer.  If a 
  10372. <+!>TIME<-!> is assigned to or from an <+!>INTEGER<-!> type then the seconds since midnight (0-86399) is assigned.  If a 
  10373. <+!>TIME<-!> is assigned to a <+!>STRING<-!> type then it is automatically converted to the following format:  "HH:MM:SS", where HH is the two digit hour (00-23), MM is the two digit minute (00-59), and SS is the two digit second (00-59).  If a foreign lang
  10374. uage is in use that uses a different time format (for example, "HH.MM.SS") then that will be taken into account.  If a 
  10375. <+!>STRING<-!></`>is assigned to a <+!>TIME<-!> then PPL will do it's best to convert the string back to the appropriate time.  All other types, when assigned to or from a 
  10376. <+!>TIME<-!>, will be converted to an <+!>INTEGER<-!> first before being assigned to or from the 
  10377. <+!>TIME<-!> type.
  10378.  
  10379. @Small_Header@<:#259,9360>Examples
  10380.  
  10381. @Example_Text@<:#158,9360><+!>TIME tob, now, pageHours(2), hourList(24)<-!>
  10382.  
  10383. @Small_Header@<:#259,9360>See Also
  10384.  
  10385. <:#240,9360><+!>BOOLEAN <+">Type<-">, DATE <+">Type<-">, INTEGER <+">Type<-">, MONEY 
  10386. <+">Type<-">, STRING <+">Type<-"><-!>
  10387.  
  10388. <:p<* >>
  10389.  
  10390. @Subhead@<:#360,9360>TIME()   <+">Function<-">
  10391.  
  10392. @Small_Header@<:#259,9360>Function
  10393.  
  10394. <:#240,9360>Get the current time.
  10395.  
  10396. @Small_Header@<:#259,9360>Syntax
  10397.  
  10398. <:#202,9360><:f,QCourier,>TIME<:f><:f,QCourier,>(<:f><:f,QCourier,>)<:f>
  10399.  
  10400. @Indent_List@<:#240,9360>    No arguments are required
  10401.  
  10402. @Small_Header@<:#259,9360>Return Type & Value
  10403.  
  10404. @Indent_List@<:#245,9360><+!>TIME<-!>    Returns the current time.
  10405.  
  10406. @Small_Header@<:#259,9360>Remarks
  10407.  
  10408. <:#1200,9360>The time returned is represented internally as the number of seconds elapsed since midnight.  It may be used as is (for display, storage or as an argument to another function or statement) or assigned to an integer for arithmetic purposes.  00:00:00 (midnig
  10409. ht) has a value of 0, 00:00:01 a value of 1, 00:01:00 a value of 60, 01:00:00 a value of 3600, etc, until 23:59:59 which has a value of 86399.
  10410.  
  10411. @Small_Header@<:#259,9360>Examples
  10412.  
  10413. @Example_Text@<:#168,9360>PRINTLN "The time is ",<+!>TIME()<-!>
  10414.  
  10415. @Small_Header@<:#259,9360>See Also
  10416.  
  10417. <:#240,9360><-"><-">
  10418.  
  10419. <:p<* >>
  10420.  
  10421. @Subhead@<:#360,9360>TIMEAP()   <+">Function<-">
  10422.  
  10423. @Small_Header@<:#259,9360>Function
  10424.  
  10425. <:#240,9360>Converts a time value to a 12-hour AM/PM formatted string.
  10426.  
  10427. @Small_Header@<:#259,9360>Syntax
  10428.  
  10429. <:#202,9360><:f,QCourier,>TIMEAP(texp)<:f>
  10430.  
  10431. @Indent_List@<:#240,9360>    <:f,QCourier,>texp<:f>    Any time expression.
  10432.  
  10433. @Small_Header@<+@><:#259,9360>Return Type & Value
  10434.  
  10435. @Indent_List@<:#485,9360><+!>STRING<-!>    Returns a string formatted with the time specified by texp in a 12-hour AM/PM format.
  10436.  
  10437. @Small_Header@<:#259,9360>Remarks
  10438.  
  10439. <:#965,9360><+!>TIME<-!> values are, by default, formatted for military time ("HH:MM:SS") when displayed or assigned to a string variable.  You may wish to format them in a 12-hour AM/PM format in some circumstances, however.  This function perform the conversion and f
  10440. ormat the time in "HH:MM:SS XM" format (HH = hour, MM = minute, SS = second, X = A or P).
  10441.  
  10442. @Small_Header@<:#259,9360>Examples
  10443.  
  10444. @Example_Text@<:#168,9360>PRINTLN "The current time is ",<+!>TIMEAP(TIME())<-!>
  10445.  
  10446. @Small_Header@<:#259,9360>See Also
  10447.  
  10448. <:#240,9360><+!><-"><-"><-"><-">
  10449.  
  10450. <:p<* >>
  10451.  
  10452. @Subhead@<:#360,9360>TOKCOUNT()   <+">Function<-">
  10453.  
  10454. @Small_Header@<:#259,9360>Function
  10455.  
  10456. <:#240,9360>Access the number of tokens pending.
  10457.  
  10458. @Small_Header@<:#259,9360>Syntax
  10459.  
  10460. <:#202,9360><:f,QCourier,>TOKCOUNT<:f><:f,QCourier,>(<:f><:f,QCourier,>)<:f>
  10461.  
  10462. @Indent_List@<:#240,9360>    No arguments are required
  10463.  
  10464. @Small_Header@<:#259,9360>Return Type & Value
  10465.  
  10466. @Indent_List@<:#245,9360><+!>INTEGER<-!>    Returns the number of tokens available.
  10467.  
  10468. @Small_Header@<:#259,9360>Remarks
  10469.  
  10470. <:#1935,9360>Parameter passing between PCBoard and PPL applications (and between PPL applications) and command line parsing is accomplished via tokens.  This function will return the number of tokens available via the 
  10471. <+!>GETTOKEN<-!> statement and the <+!>GETTOKEN()<-!> function.  The value returned by this will be decremented after each token is retrieved until it reaches 0 (no more tokens available).  The 
  10472. <+!>TOKENIZE<-!> function will overwrite any pending tokens with new tokens and reinitialize this function to the new number.  Finally, the 
  10473. <+!>TOKENSTR()<-!> function will clear this function to 0 and return all tokens in a string with semi-colons separating individual tokens.<-">
  10474.  
  10475. @Small_Header@<:#259,9360>Examples
  10476.  
  10477. @Example_Text@<:#336,9360>PRINTLN "There are ",<+!>TOKCOUNT()<-!>," tokens"<**>WHILE (<+!>TOKCOUNT()<-!> <;> 0) PRINTLN GETTOKEN()
  10478.  
  10479. @Small_Header@<:#259,9360>See Also
  10480.  
  10481. <:#240,9360><-"><-">
  10482.  
  10483. <:p<* >>
  10484.  
  10485. @Subhead@<:#360,9360>TOKENIZE   <+">Statement<-">
  10486.  
  10487. @Small_Header@<:#259,9360>Function
  10488.  
  10489. <:#240,9360>Split up a string into tokens separated by semi-colons or spaces.
  10490.  
  10491. @Small_Header@<:#259,9360>Syntax
  10492.  
  10493. <:#202,9360><:f,QCourier,>TOKENIZE sexp<:f>
  10494.  
  10495. @Indent_List@<:#240,9360>    <:f,QCourier,>sexp<:f>    Any string expression.
  10496.  
  10497. @Small_Header@<:#259,9360>Remarks
  10498.  
  10499. <:#1700,9360>One of the strongest features of PCBoard is it's ability to take a series of stacked parameters from a command line and use them all at once instead of requiring the user to navigate a series of menus and select one option at each step of the way.  The 
  10500. <+!>TOKENIZE<-!> statement is the PPL equivalent of what PCBoard uses to break a command line into individual commands (tokens).  The number of tokens available may be accessed via the 
  10501. <+!>TOKCOUNT()<-!> function, and each token may be accessed, one at a time, by the 
  10502. <+!>GETTOKEN<-!> statement and/or the <+!>GETTOKEN()<-!> function.
  10503.  
  10504. @Small_Header@<:#259,9360>Examples
  10505.  
  10506. @Example_Text@<:#790,9360>STRING  cmdline<**>INPUT "Command",cmdline<**><+!>TOKENIZE cmdline<-!><**>PRINTLN "You entered ",TOKCOUNT()," tokens"<**>WHILE (TOKCOUNT() <;> 0) PRINTLN "Token:  ",CHR(34),GETTOKEN(),CHR(34)
  10507.  
  10508. @Small_Header@<:#259,9360>See Also
  10509.  
  10510. <:#480,9360><+!><-"><-"><-"><-">GETTOKEN <+">Statement<-">, GETTOKEN() <+">Function<-">, TOKCOUNT() 
  10511. <+">Function<-!><-"><+!>, TOKENSTR() <+">Function<-"><-!><+!><-"><-"><-">
  10512.  
  10513. <:p<* >>
  10514.  
  10515. @Subhead@<:#360,9360>TOKENSTR()   <+">Function<-">
  10516.  
  10517. @Small_Header@<:#259,9360>Function
  10518.  
  10519. <:#240,9360>Rebuild and return a previously tokenized string.
  10520.  
  10521. @Small_Header@<:#259,9360>Syntax
  10522.  
  10523. <:#202,9360><:f,QCourier,>TOKENSTR()<:f>
  10524.  
  10525. @Indent_List@<:#240,9360>    No arguments are required
  10526.  
  10527. @Small_Header@<:#259,9360>Return Type & Value
  10528.  
  10529. @Indent_List@<:#245,9360><+!>STRING<-!>    Returns the rebuilt string that was previously tokenized.
  10530.  
  10531. @Small_Header@<:#259,9360>Remarks
  10532.  
  10533. <:#2170,9360>One of the strongest features of PCBoard is it's ability to take a series of stacked parameters from a command line and use them all at once instead of requiring the user to navigate a series of menus and select one option at each step of the way.  The 
  10534. <+!>TOKENIZE<-!> statement is the PPL equivalent of what PCBoard uses to break a command line into individual commands (tokens).  This function will take all pending tokens and build a string with appropriate token separators.  For example, the string "R A 
  10535. S" would be broken into three separate tokens; "R", "A" and "S".  
  10536. <+!>TOKENSTR()<-!> would take those tokens and return the following string:  "R;A;S".  Note that, regardless of the separator used in the original string, the semi-colon character will be used in the rebuilt string.
  10537.  
  10538. @Small_Header@<:#259,9360>Examples
  10539.  
  10540. @Example_Text@<:#958,9360>STRING  cmdline<**>INPUT "Command",cmdline<**>TOKENIZE cmdline<**>PRINTLN "You entered ",TOKCOUNT()," tokens"<**>PRINTLN "Original string:  ",cmdline<**>PRINTLN "     TOKENSTR():  ",<+!>TOKENSTR()<-!>
  10541.  
  10542. @Small_Header@<:#259,9360>See Also
  10543.  
  10544. <:#476,9360><-"><-"><-"><-"><-"><-"><-"><-"><+!>GETTOKEN <+">Statement<-">, <-!><-"><-"><-"><-"><+!>GETTOKEN() 
  10545. <+">Function<-">, <-!><+!>TOKCOUNT() <+">Function<-!><-"><+!>, TOKENIZE 
  10546. <+">Statement<-!><-"><-"><+!><-"><-"><-">
  10547.  
  10548. <:p<* >>
  10549.  
  10550. @Subhead@<:#360,9360>TRIM()   <+">Function<-">
  10551.  
  10552. @Small_Header@<:#259,9360>Function
  10553.  
  10554. <:#240,9360>Trim a specified character from both ends of a string.
  10555.  
  10556. @Small_Header@<:#259,9360>Syntax
  10557.  
  10558. <:#202,9360><:f,QCourier,>TRIM(str,ch)<:f>
  10559.  
  10560. @Indent_List@<:#240,9360>    <:f,QCourier,>str<:f>    Any string expression.
  10561.  
  10562. @Indent_List@<:#240,9360>    <:f,QCourier,>ch<:f>    A string with the character to strip from both ends of str.
  10563.  
  10564. @Small_Header@<:#259,9360>Return Type & Value
  10565.  
  10566. @Indent_List@<:#245,9360><+!>STRING<-!>    Returns the trimmed str.
  10567.  
  10568. @Small_Header@<:#259,9360>Remarks
  10569.  
  10570. <:#720,9360>A common need in programming is to strip leading and/or trailing spaces (or other characters).  This function will strip a specified character from both ends of a string and return the trimmed string.
  10571.  
  10572. @Small_Header@<:#259,9360>Examples
  10573.  
  10574. @Example_Text@<:#820,9360>STRING s<**>LET s = "   TEST   "<**>PRINTLN <+!>TRIM(s," ")<-!> ' Will print "TEST"<**>PRINTLN 
  10575. <+!>TRIM(".....DA"+"TA.....",".")<-!> ' Will print "DATA"<**>PRINTLN 
  10576. <+!>TRIM(".....DA"+"TA....."," ")<-!> ' Will print ".....DATA....."
  10577.  
  10578. @Small_Header@<:#259,9360>See Also
  10579.  
  10580. <:#240,9360><-"><-"><-"><-"><-"><-"><-"><-"><-"><+!><-"><-"><-">LTRIM() <+">Function<-">, RTRIM() 
  10581. <+">Function<-">
  10582.  
  10583. <:p<* >>
  10584.  
  10585. @Subhead@<:#360,9360>TRUE   <+">Constant<-">
  10586.  
  10587. @Small_Header@<:#259,9360>Function
  10588.  
  10589. <:#240,9360>To provide a named constant for the boolean true value in boolean expressions.
  10590.  
  10591. @Small_Header@<:#259,9360>Value
  10592.  
  10593. <:#240,9360>1 = 1b = 1o = 1h
  10594.  
  10595. @Small_Header@<:#259,9360>Remarks
  10596.  
  10597. <:#970,9360><+!>BOOLEAN<-!> logic is based on two values:  <+!>TRUE<-!> (1) and 
  10598. <+!>FALSE<-!> (0).  The literal numeric constants 0 and 1 may be used in expressions, or you may use the predefined named constants 
  10599. <+!>TRUE<-!> and <+!>FALSE<-!>.  They make for more readable, maintainable code and have no more overhead than any other constant value at run time.
  10600.  
  10601. @Small_Header@<:#259,9360>Examples
  10602.  
  10603. @Example_Text@<:#1126,9360>BOOLEAN flag<**>LET flag = <+!>TRUE<-!><**>WHILE (!flag) DO<**>  INPUTSTR "Text",s,@X0E,60,"ABCDEFGHIJKLMNOPQRSTUVWXYZ ",<+!>UPCASE<-!><**>  PRINTLN s<**>  IF (s = "QUIT") LET flag = FALSE<**>ENDWHILE
  10604.  
  10605. @Small_Header@<:#259,9360>See Also
  10606.  
  10607. <:#240,9360><-"><-"><-"><-"><-"><-"><-"><-"><+!>FALSE <-!><+!><+">Constant<-!><-"><-"><-"><-">
  10608.  
  10609. <:p<* >>
  10610.  
  10611. @Subhead@<:#360,9360>UN_...()   <+">Function<-">
  10612.  
  10613. @Small_Header@<:#259,9360>Function
  10614.  
  10615. <:#240,9360>Get a piece of information about a node.
  10616.  
  10617. @Small_Header@<:#259,9360>Syntax
  10618.  
  10619. <:#202,9360><:f,QCourier,>UN_<:f><:f,QCourier,>...<:f><:f,QCourier,>(<:f><:f,QCourier,>)<:f>
  10620.  
  10621. @Indent_List@<:#240,9360>    No arguments are required
  10622.  
  10623. <:#240,9360>UN_ should be followed by one of the following:  CITY, NAME, OPER, or STAT.
  10624.  
  10625. @Small_Header@<:#259,9360>Return Type & Value
  10626.  
  10627. @Indent_List@<:#245,9360><+!>STRING<-!>    Returns a string with the desired piece of information.
  10628.  
  10629. @Small_Header@<:#259,9360>Remarks
  10630.  
  10631. <:#1215,9360>There are actually four different functions that return information from the USERNET.XXX file.  
  10632. <+!>UN_CITY()<-!> will return the city field, <+!>UN_NAME()<-!> will return the user name field, 
  10633. <+!>UN_OPER()<-!> will return the operation text field, and <+!>UN_STAT()<-!> will return the status field.  The information returned by these functions is only meaningful after executing the 
  10634. <+!>RDUNET<-!> statement for a specific node.
  10635.  
  10636. @Small_Header@<:#259,9360>Examples
  10637.  
  10638. @Example_Text@<:#652,9360>RDUNET PCBNODE()<**>WRUNET PCBNODE(),<+!>UN_STAT()<-!>,<+!>UN_NAME()<-!>,<+!>UN_CITY()<-!>,"Running "+PPENAME(),""<**>RDUNET 1<**>WRUNET 1,<+!>UN_STAT()<-!>,<+!>UN_NAME()<-!>,<+!>UN_CITY()<-!>,<+!>UN_OPER()<-!>,"Hello there node 1"
  10639.  
  10640. @Small_Header@<:#259,9360>See Also
  10641.  
  10642. <:#240,9360><-"><-"><-"><-"><+!>RDUNET<-!><+!><+"> Statement<-">, <-!><+!>WRUNET<-!><+!><+"> Statement<-"><-!><-"><-"><-">
  10643.  
  10644. <:p<* >>
  10645.  
  10646. @Subhead@<:#360,9360>UPCASE   <+">Constant<-">
  10647.  
  10648. @Small_Header@<:#259,9360>Function
  10649.  
  10650. <:#245,9360>Set the force uppercase flag in an <+!>INPUTSTR<-!> or <+!>PROMPTSTR<-!> statement.
  10651.  
  10652. @Small_Header@<:#259,9360>Value
  10653.  
  10654. <:#240,9360>8 = 1000b = 10o = 8h
  10655.  
  10656. @Small_Header@<:#259,9360>Remarks
  10657.  
  10658. <:#1205,9360>The <+!>INPUTSTR<-!> and <+!>PROMPTSTR<-!> statements have the ability to force all input characters to uppercase.  This is useful in getting case insensitive replies from the user.  If this flag is used, you need not pass lowercase valid characters as they
  10659.  will be automatically converted at runtime.  If this flag is not used and you need to input alphabetic characters, you should pass both lowercase and uppercase characters in the valid character string.
  10660.  
  10661. @Small_Header@<:#259,9360>Examples
  10662.  
  10663. @Example_Text@<:#800,9360>STRING s<**>WHILE (s <<<;> "QUIT") DO<**>  INPUTSTR "Text",s,@X0E,60,"ABCDEFGHIJKLMNOPQRSTUVWXYZ ",<+!>UPCASE<-!><**>  PRINTLN s<**>ENDWHILE
  10664.  
  10665. @Small_Header@<:#259,9360>See Also
  10666.  
  10667. <:#240,9360><-"><-"><-"><-"><+!>INPUTSTR <+">Statement<-">, <-!><-"><-"><+!>PROMPTSTR 
  10668. <+">Statement<-!><-"><-"><-"><-">
  10669.  
  10670. <:p<* >>
  10671.  
  10672. @Subhead@<:#360,9360>UPPER()   <+">Function<-">
  10673.  
  10674. @Small_Header@<:#259,9360>Function
  10675.  
  10676. <:#240,9360>Converts lowercase characters in a string to uppercase.
  10677.  
  10678. @Small_Header@<:#259,9360>Syntax
  10679.  
  10680. <:#202,9360><:f,QCourier,>UPPER(sexp)<:f>
  10681.  
  10682. @Indent_List@<:#240,9360>    <:f,QCourier,>sexp<:f>    Any string expression.
  10683.  
  10684. @Small_Header@<+@><:#259,9360>Return Type & Value
  10685.  
  10686. @Indent_List@<:#245,9360><+!>STRING<-!>    Returns sexp with all lowercase characters converted to uppercase.
  10687.  
  10688. @Small_Header@<:#259,9360>Remarks
  10689.  
  10690. <:#1205,9360>Although "STRING" is technically different from "string" (ie, the computer doesn't recognize them as being the same because one is uppercase and the other is lowercase), it is often necessary to save, display or compare information in a case insensitive for
  10691. mat.  This function will return a string with all lowercase characters converted to uppercase.  So, using the above example, 
  10692. <+!>UPPER("string")<-!> would return "STRING".
  10693.  
  10694. @Small_Header@<:#259,9360>Examples
  10695.  
  10696. @Example_Text@<:#800,9360>STRING s<**>WHILE (<+!>UPPER(s)<-!> <<<;> "QUIT") DO<**>  INPUT "Text",s<**>  PRINTLN LOWER(s)<**>ENDWHILE
  10697.  
  10698. @Small_Header@<:#259,9360>See Also
  10699.  
  10700. <:#240,9360><+!>LOWER() <+">Function<-"><-!><-"><-"><-">
  10701.  
  10702. <:p<* >>
  10703.  
  10704. @Subhead@<:#360,9360>U_ADDR()   <+">VARIABLE ARRAY<-">
  10705.  
  10706. @Small_Header@<:s><:#259,9360>Function
  10707.  
  10708. <:s><:#240,9360>Allow reading and writing of the current users address information.
  10709.  
  10710. @Small_Header@<:s><:#259,9360>Type & Value
  10711.  
  10712. <:s><:#240,9360><+!>STRING<-!>
  10713.  
  10714. @Indent_List@<:#240,9360>    Subscript 0    Address Line 1 (50 characters max).
  10715.  
  10716. @Indent_List@<:#240,9360>    Subscript 1    Address Line 2 (50 characters max).
  10717.  
  10718. @Indent_List@<:#240,9360>    Subscript 2    City (25 characters max).
  10719.  
  10720. @Indent_List@<:#240,9360>    Subscript 3    State (10 characters max).
  10721.  
  10722. @Indent_List@<:#240,9360>    Subscript 4    ZIP Code (10 characters max).
  10723.  
  10724. @Indent_List@<:#240,9360>    Subscript 5    Country (15 characters max).
  10725.  
  10726. @Small_Header@<:s><:#259,9360>Remarks
  10727.  
  10728. <:#1460,9360>This array is filled with information from the current users record when the 
  10729. <+!>GETUSER<-!> statement is executed.  It may then be changed and written back to the users record with the 
  10730. <+!>PUTUSER<-!> statement.  Note that the array is empty until a <+!>GETUSER<-!> statement is processed and that changes are not written until a 
  10731. <+!>PUTUSER<-!> statement is processed.  Additionally, the array will only have meaningful information if the address PSA is installed.  The existence of the address PSA may be checked with the 
  10732. <+!>PSA()<-!> function.
  10733.  
  10734. @Small_Header@<:s><:#259,9360>Examples
  10735.  
  10736. @Example_Text@<:#1640,9360>IF (PSA(3)) THEN<**>  GETUSER<**>  INPUT "Addr 1",<+!>U_ADDR(0)<-!><**>  INPUT "Addr 2",<+!>U_ADDR(1)<-!><**>  INPUT "City  ",<+!>U_ADDR(2)<-!><**>  INPUT "State ",<+!>U_ADDR(3)<-!><**>  INPUT "ZIP   ",<+!>U_ADDR(4)<-!><**>  INPUT "Cntry ",<+!>U_ADDR(5)<-!>
  10737. <**>  PUTUSER<**>ENDIF
  10738.  
  10739. @Small_Header@<:s><:#259,9360>See Also
  10740.  
  10741. <:#240,9360><+!>GETUSER <+">Statement<-">, PSA() <+">Function<-">, PUTUSER <+">Statement<-"><-!><-"><-">
  10742.  
  10743. <:s><:p<* >>
  10744.  
  10745. @Subhead@<:#360,9360>U_ALIAS   <+">VARIABLE<-">
  10746.  
  10747. @Small_Header@<:s><:#259,9360>Function
  10748.  
  10749. <:s><:#240,9360>Allow reading and writing of the current users alias.
  10750.  
  10751. @Small_Header@<:s><:#259,9360>Type & Value
  10752.  
  10753. @Indent_List@<:#245,9360><+!>STRING<-!>    The current users alias (25 characters max).
  10754.  
  10755. @Small_Header@<:s><:#259,9360>Remarks
  10756.  
  10757. <:#1460,9360>This <+!>STRING<-!> is filled with information from the current users record when the 
  10758. <+!>GETUSER<-!> statement is executed.  It may then be changed and written back to the users record with the 
  10759. <+!>PUTUSER<-!> statement.  Note that it is empty until a <+!>GETUSER<-!> statement is processed and that changes are not written until a 
  10760. <+!>PUTUSER<-!> statement is processed.  Additionally, it will only have meaningful information if the alias PSA is installed.  The existence of the alias PSA may be checked with the 
  10761. <+!>PSA()<-!> function.
  10762.  
  10763. @Small_Header@<:s><:#259,9360>Examples
  10764.  
  10765. @Example_Text@<:#958,9360>IF (PSA(1)) THEN<**>  GETUSER<**>  PRINTLN "Your alias is ",<+!>U_ALIAS<-!><**>ELSE<**>  PRINTLN "Your name is ",U_NAME()<**>ENDIF
  10766.  
  10767. @Small_Header@<:s><:#259,9360>See Also
  10768.  
  10769. <:#240,9360><+!>GETUSER <+">Statement<-">, PSA() <+">Function<-">, PUTUSER <+">Statement<-"><-!><-"><-">
  10770.  
  10771. <:s><:p<* >>
  10772.  
  10773. @Subhead@<:#360,9360>U_BDL()   <+">Function<-">
  10774.  
  10775. @Small_Header@<:#259,9360>Function
  10776.  
  10777. <:#240,9360>Access the total number of bytes downloaded by the current user.
  10778.  
  10779. @Small_Header@<:#259,9360>Syntax
  10780.  
  10781. <:#202,9360><:f,QCourier,>U_BDL<:f><:f,QCourier,>(<:f><:f,QCourier,>)<:f>
  10782.  
  10783. @Indent_List@<:#240,9360>    No arguments are required
  10784.  
  10785. @Small_Header@<:#259,9360>Return Type & Value
  10786.  
  10787. @Indent_List@<:#245,9360><+!>INTEGER<-!>    Returns the current users total bytes downloaded.
  10788.  
  10789. @Small_Header@<:#259,9360>Remarks
  10790.  
  10791. <:#1210,9360>This function will return information that can be useful in modifying PCBoard's built in ratio management system and the view user information command.  Of course, it is not limited to that; anywhere you need to know how many bytes the current user has down
  10792. loaded, this function will provide that information.  Unlike the predefined 
  10793. <+!>U_...<-!> user variables, this function does not require the use of 
  10794. <+!>GETUSER<-!> to return valid information.
  10795.  
  10796. @Small_Header@<:#259,9360>Examples
  10797.  
  10798. @Example_Text@<:#168,9360>PRINTLN "You have ULed ",U_BUL()," bytes and DLed ",<+!>U_BDL()<-!>," bytes."
  10799.  
  10800. @Small_Header@<:#259,9360>See Also
  10801.  
  10802. <:#240,9360><-"><-"><-">
  10803.  
  10804. <:p<* >>
  10805.  
  10806. @Subhead@<:#360,9360>U_BDLDAY()   <+">Function<-">
  10807.  
  10808. @Small_Header@<:#259,9360>Function
  10809.  
  10810. <:#240,9360>Access the number of bytes downloaded by the current user today.
  10811.  
  10812. @Small_Header@<:#259,9360>Syntax
  10813.  
  10814. <:#202,9360><:f,QCourier,>U_BDLDAY<:f><:f,QCourier,>(<:f><:f,QCourier,>)<:f>
  10815.  
  10816. @Indent_List@<:#240,9360>    No arguments are required
  10817.  
  10818. @Small_Header@<:#259,9360>Return Type & Value
  10819.  
  10820. @Indent_List@<:#245,9360><+!>INTEGER<-!>    Returns the current users bytes downloaded today.
  10821.  
  10822. @Small_Header@<:#259,9360>Remarks
  10823.  
  10824. <:#1210,9360>This function will return information that can be useful in modifying PCBoard's built in ratio management system and the view user information command.  Of course, it is not limited to that; anywhere you need to know how many bytes the current user has down
  10825. loaded today, this function will provide that information.  Unlike the predefined 
  10826. <+!>U_...<-!> user variables, this function does not require the use of 
  10827. <+!>GETUSER<-!> to return valid information.
  10828.  
  10829. @Small_Header@<:#259,9360>Examples
  10830.  
  10831. @Example_Text@<:#168,9360>PRINTLN "You have downloaded ",<+!>U_BDLDAY()<-!>," bytes today."
  10832.  
  10833. @Small_Header@<:#259,9360>See Also
  10834.  
  10835. <:#240,9360><-"><-"><-">
  10836.  
  10837. <:p<* >>
  10838.  
  10839. @Subhead@<:#360,9360>U_BDPHONE   <+">VARIABLE<-">
  10840.  
  10841. @Small_Header@<:#259,9360>Function
  10842.  
  10843. <:#240,9360>Allow reading and writing of the current users business/data phone number.
  10844.  
  10845. @Small_Header@<:#259,9360>Type & Value
  10846.  
  10847. @Indent_List@<:#245,9360><+!>STRING<-!>    The current users business/data phone number (13 characters max).
  10848.  
  10849. @Small_Header@<:#259,9360>Remarks
  10850.  
  10851. <:#975,9360>This <+!>STRING<-!> is filled with information from the current users record when the 
  10852. <+!>GETUSER<-!> statement is executed.  It may then be changed and written back to the users record with the 
  10853. <+!>PUTUSER<-!> statement.  Note that it is empty until a <+!>GETUSER<-!> statement is processed and that changes are not written until a 
  10854. <+!>PUTUSER<-!> statement is processed.
  10855.  
  10856. @Small_Header@<:#259,9360>Examples
  10857.  
  10858. @Example_Text@<:#484,9360>GETUSER<**>PRINTLN "   Home/Voice Phone Number:  ",U_HVPHONE<**>PRINTLN "Business/Data Phone Number:  ",<+!>U_BDPHONE<-!>
  10859.  
  10860. @Small_Header@<:#259,9360>See Also
  10861.  
  10862. <:#240,9360><+!>GETUSER <+">Statement<-">, <-!><+!>PUTUSER <+">Statement<-"><-!><-"><-">
  10863.  
  10864. <:p<* >>
  10865.  
  10866. @Subhead@<:#360,9360>U_BUL()   <+">Function<-">
  10867.  
  10868. @Small_Header@<:#259,9360>Function
  10869.  
  10870. <:#240,9360>Access the total number of bytes uploaded by the current user.
  10871.  
  10872. @Small_Header@<:#259,9360>Syntax
  10873.  
  10874. <:#202,9360><:f,QCourier,>U_BUL<:f><:f,QCourier,>(<:f><:f,QCourier,>)<:f>
  10875.  
  10876. @Indent_List@<:#240,9360>    No arguments are required
  10877.  
  10878. @Small_Header@<:#259,9360>Return Type & Value
  10879.  
  10880. @Indent_List@<:#245,9360><+!>INTEGER<-!>    Returns the current users total bytes uploaded.
  10881.  
  10882. @Small_Header@<:#259,9360>Remarks
  10883.  
  10884. <:#1210,9360>This function will return information that can be useful in modifying PCBoard's built in ratio management system and the view user information command.  Of course, it is not limited to that; anywhere you need to know how many bytes the current user has uplo
  10885. aded, this function will provide that information.  Unlike the predefined 
  10886. <+!>U_...<-!> user variables, this function does not require the use of 
  10887. <+!>GETUSER<-!> to return valid information.
  10888.  
  10889. @Small_Header@<:#259,9360>Examples
  10890.  
  10891. @Example_Text@<:#168,9360>PRINTLN "You have ULed ",<+!>U_BUL()<-!>," bytes and DLed ",U_BDL()," bytes."
  10892.  
  10893. @Small_Header@<:#259,9360>See Also
  10894.  
  10895. <:#240,9360><-"><-"><-">
  10896.  
  10897. <:p<* >>
  10898.  
  10899. @Subhead@<:#360,9360>U_CITY   <+">VARIABLE<-">
  10900.  
  10901. @Small_Header@<:#259,9360>Function
  10902.  
  10903. <:#240,9360>Allow reading and writing of the current users city information.
  10904.  
  10905. @Small_Header@<:#259,9360>Type & Value
  10906.  
  10907. @Indent_List@<:#245,9360><+!>STRING<-!>    The current users city information (24 characters max).
  10908.  
  10909. @Small_Header@<:#259,9360>Remarks
  10910.  
  10911. <:#1455,9360>This <+!>STRING<-!> is filled with information from the current users record when the 
  10912. <+!>GETUSER<-!> statement is executed.  It may then be changed and written back to the users record with the 
  10913. <+!>PUTUSER<-!> statement.  Note that it is empty until a <+!>GETUSER<-!> statement is processed and that changes are not written until a 
  10914. <+!>PUTUSER<-!> statement is processed.  Note that this information is separate from the address PSA and does not require that the address PSA be installed.
  10915.  
  10916. @Small_Header@<:#259,9360>Examples
  10917.  
  10918. @Example_Text@<:#642,9360>GETUSER<**>LET <+!>U_CITY<-!> = "Timbuktu"<**>PRINTLN "You are now from Timbuktu!  :)"<**>PUTUSER
  10919.  
  10920. @Small_Header@<:#259,9360>See Also
  10921.  
  10922. <:#240,9360><+!>GETUSER <+">Statement<-">, <-!><+!>PUTUSER <+">Statement<-"><-!><-"><-">
  10923.  
  10924. <:p<* >>
  10925.  
  10926. @Subhead@<:#360,9360>U_CLS   <+">VARIABLE<-">
  10927.  
  10928. @Small_Header@<:#259,9360>Function
  10929.  
  10930. <:#240,9360>Allow reading and writing of the current users message clear screen flag.
  10931.  
  10932. @Small_Header@<:#259,9360>Type & Value
  10933.  
  10934. @Indent_List@<:#245,9360><+!>BOOLEAN<-!>    The current users clear screen flag status (<+!>TRUE<-!> or 
  10935. <+!>FALSE<-!>).
  10936.  
  10937. @Small_Header@<:#259,9360>Remarks
  10938.  
  10939. <:#975,9360>This <+!>BOOLEAN<-!> is set with information from the current users record when the 
  10940. <+!>GETUSER<-!> statement is executed.  It may then be changed and written back to the users record with the 
  10941. <+!>PUTUSER<-!> statement.  Note that it is undefined until a <+!>GETUSER<-!> statement is processed and that changes are not written until a 
  10942. <+!>PUTUSER<-!> statement is processed.
  10943.  
  10944. @Small_Header@<:#259,9360>Examples
  10945.  
  10946. @Example_Text@<:#642,9360>GETUSER<**>PRINTLN "Turning on the message clear screen flag..."<**>LET 
  10947. <+!>U_CLS<-!> = TRUE<**>PUTUSER
  10948.  
  10949. @Small_Header@<:#259,9360>See Also
  10950.  
  10951. <:#240,9360><+!>GETUSER <+">Statement<-">, <-!><+!>PUTUSER <+">Statement<-"><-!><-"><-">
  10952.  
  10953. <:p<* >>
  10954.  
  10955. @Subhead@<:#360,9360>U_CMNT1   <+">VARIABLE<-">
  10956.  
  10957. @Small_Header@<:#259,9360>Function
  10958.  
  10959. <:#240,9360>Allow reading and writing of the current users comment field.
  10960.  
  10961. @Small_Header@<:#259,9360>Type & Value
  10962.  
  10963. @Indent_List@<:#245,9360><+!>STRING<-!>    The current users comment field (30 characters max).
  10964.  
  10965. @Small_Header@<:#259,9360>Remarks
  10966.  
  10967. <:#1455,9360>This <+!>STRING<-!> is filled with information from the current users record when the 
  10968. <+!>GETUSER<-!> statement is executed.  It may then be changed and written back to the users record with the 
  10969. <+!>PUTUSER<-!> statement.  Note that it is empty until a <+!>GETUSER<-!> statement is processed and that changes are not written until a 
  10970. <+!>PUTUSER<-!> statement is processed.  Note that this information is separate from the notes PSA (though similar) and does not require that the notes PSA be installed.
  10971.  
  10972. @Small_Header@<:#259,9360>Examples
  10973.  
  10974. @Example_Text@<:#484,9360>GETUSER<**>PRINTLN " User Comment:  ",<+!>U_CMNT1<-!><**>PRINTLN "SysOp Comment:  ",U_CMNT2
  10975.  
  10976. @Small_Header@<:#259,9360>See Also
  10977.  
  10978. <:#240,9360><+!>GETUSER <+">Statement<-">, <-!><+!>PUTUSER <+">Statement<-"><-!><-"><-">
  10979.  
  10980. <:p<* >>
  10981.  
  10982. @Subhead@<:#360,9360>U_CMNT2   <+">VARIABLE<-">
  10983.  
  10984. @Small_Header@<:#259,9360>Function
  10985.  
  10986. <:#240,9360>Allow reading and writing of the current users SysOp comment field.
  10987.  
  10988. @Small_Header@<:#259,9360>Type & Value
  10989.  
  10990. @Indent_List@<:#245,9360><+!>STRING<-!>    The current users SysOp comment field (30 characters max).
  10991.  
  10992. @Small_Header@<:#259,9360>Remarks
  10993.  
  10994. <:#1455,9360>This <+!>STRING<-!> is filled with information from the current users record when the 
  10995. <+!>GETUSER<-!> statement is executed.  It may then be changed and written back to the users record with the 
  10996. <+!>PUTUSER<-!> statement.  Note that it is empty until a <+!>GETUSER<-!> statement is processed and that changes are not written until a 
  10997. <+!>PUTUSER<-!> statement is processed.  Note that this information is separate from the notes PSA (though similar) and does not require that the notes PSA be installed.
  10998.  
  10999. @Small_Header@<:#259,9360>Examples
  11000.  
  11001. @Example_Text@<:#484,9360>GETUSER<**>PRINTLN " User Comment:  ",U_CMNT1<**>PRINTLN "SysOp Comment:  ",<+!>U_CMNT2<-!>
  11002.  
  11003. @Small_Header@<:#259,9360>See Also
  11004.  
  11005. <:#240,9360><+!>GETUSER <+">Statement<-">, <-!><+!>PUTUSER <+">Statement<-"><-!><-"><-">
  11006.  
  11007. <:p<* >>
  11008.  
  11009. @Subhead@<:#360,9360>U_DEF79   <+">VARIABLE<-">
  11010.  
  11011. @Small_Header@<:#259,9360>Function
  11012.  
  11013. <:#240,9360>Allow reading and writing of the current users message editor default width flag.
  11014.  
  11015. @Small_Header@<:#259,9360>Type & Value
  11016.  
  11017. @Indent_List@<:#245,9360><+!>BOOLEAN<-!>    The current users default editor width flag status (<+!>TRUE<-!> or 
  11018. <+!>FALSE<-!>).
  11019.  
  11020. @Small_Header@<:#259,9360>Remarks
  11021.  
  11022. <:#975,9360>This <+!>BOOLEAN<-!> is set with information from the current users record when the 
  11023. <+!>GETUSER<-!> statement is executed.  It may then be changed and written back to the users record with the 
  11024. <+!>PUTUSER<-!> statement.  Note that it is undefined until a <+!>GETUSER<-!> statement is processed and that changes are not written until a 
  11025. <+!>PUTUSER<-!> statement is processed.
  11026.  
  11027. @Small_Header@<:#259,9360>Examples
  11028.  
  11029. @Example_Text@<:#642,9360>GETUSER<**>PRINTLN "Turning on the wide message editor flag..."<**>LET 
  11030. <+!>U_DEF79<-!> = TRUE<**>PUTUSER
  11031.  
  11032. @Small_Header@<:#259,9360>See Also
  11033.  
  11034. <:#240,9360><+!>GETUSER <+">Statement<-">, <-!><+!>PUTUSER <+">Statement<-"><-!><-"><-">
  11035.  
  11036. <:p<* >>
  11037.  
  11038. @Subhead@<:#360,9360>U_EXPDATE   <+">VARIABLE<-">
  11039.  
  11040. @Small_Header@<:#259,9360>Function
  11041.  
  11042. <:#240,9360>Allow reading and writing of the current users subscription expiration date.
  11043.  
  11044. @Small_Header@<:#259,9360>Type & Value
  11045.  
  11046. @Indent_List@<:#245,9360><+!>DATE<-!>    The current users subscription expiration date.
  11047.  
  11048. @Small_Header@<:#259,9360>Remarks
  11049.  
  11050. <:#975,9360>This <+!>DATE<-!> is set with information from the current users record when the 
  11051. <+!>GETUSER<-!> statement is executed.  It may then be changed and written back to the users record with the 
  11052. <+!>PUTUSER<-!> statement.  Note that it is undefined until a <+!>GETUSER<-!> statement is processed and that changes are not written until a 
  11053. <+!>PUTUSER<-!> statement is processed.
  11054.  
  11055. @Small_Header@<:#259,9360>Examples
  11056.  
  11057. @Example_Text@<:#326,9360>GETUSER<**>PRINTLN "Your subscription will expire on ",<+!>U_EXPDATE<-!>
  11058.  
  11059. @Small_Header@<:#259,9360>See Also
  11060.  
  11061. <:#240,9360><+!>GETUSER <+">Statement<-">, <-!><+!>PUTUSER <+">Statement<-"><-!><-"><-">
  11062.  
  11063. <:p<* >>
  11064.  
  11065. @Subhead@<:#360,9360>U_EXPERT   <+">VARIABLE<-">
  11066.  
  11067. @Small_Header@<:#259,9360>Function
  11068.  
  11069. <:#240,9360>Allow reading and writing of the current users expert status flag.
  11070.  
  11071. @Small_Header@<:#259,9360>Type & Value
  11072.  
  11073. @Indent_List@<:#245,9360><+!>BOOLEAN<-!>    The current users expert flag status (<+!>TRUE<-!> or 
  11074. <+!>FALSE<-!>).
  11075.  
  11076. @Small_Header@<:#259,9360>Remarks
  11077.  
  11078. <:#975,9360>This <+!>BOOLEAN<-!> is set with information from the current users record when the 
  11079. <+!>GETUSER<-!> statement is executed.  It may then be changed and written back to the users record with the 
  11080. <+!>PUTUSER<-!> statement.  Note that it is undefined until a <+!>GETUSER<-!> statement is processed and that changes are not written until a 
  11081. <+!>PUTUSER<-!> statement is processed.
  11082.  
  11083. @Small_Header@<:#259,9360>Examples
  11084.  
  11085. @Example_Text@<:#642,9360>GETUSER<**>PRINTLN "Turning off expert mode..."<**>LET <+!>U_EXPERT<-!> = FALSE<**>PUTUSER
  11086.  
  11087. @Small_Header@<:#259,9360>See Also
  11088.  
  11089. <:#240,9360><+!>GETUSER <+">Statement<-">, <-!><+!>PUTUSER <+">Statement<-"><-!><-"><-">
  11090.  
  11091. <:p<* >>
  11092.  
  11093. @Subhead@<:#360,9360>U_EXPSEC   <+">VARIABLE<-">
  11094.  
  11095. @Small_Header@<:#259,9360>Function
  11096.  
  11097. <:#240,9360>Allow reading and writing of the current users expired security level.
  11098.  
  11099. @Small_Header@<:#259,9360>Type & Value
  11100.  
  11101. @Indent_List@<:#245,9360><+!>INTEGER<-!>    The current users security level (0 - 255).
  11102.  
  11103. @Small_Header@<:#259,9360>Remarks
  11104.  
  11105. <:#975,9360>This <+!>INTEGER<-!> is set with information from the current users record when the 
  11106. <+!>GETUSER<-!> statement is executed.  It may then be changed and written back to the users record with the 
  11107. <+!>PUTUSER<-!> statement.  Note that it is undefined until a <+!>GETUSER<-!> statement is processed and that changes are not written until a 
  11108. <+!>PUTUSER<-!> statement is processed.
  11109.  
  11110. @Small_Header@<:#259,9360>Examples
  11111.  
  11112. @Example_Text@<:#326,9360>GETUSER<**>PRINTLN "Your security after subscription expiration will be ",<+!>U_SEC<-!>
  11113.  
  11114. @Small_Header@<:#259,9360>See Also
  11115.  
  11116. <:#240,9360><+!>GETUSER <+">Statement<-">, <-!><+!>PUTUSER <+">Statement<-"><-!><-"><-">
  11117.  
  11118. <:p<* >>
  11119.  
  11120. @Subhead@<:#360,9360>U_FDL()   <+">Function<-">
  11121.  
  11122. @Small_Header@<:#259,9360>Function
  11123.  
  11124. <:#240,9360>Access the total number of files downloaded by the current user.
  11125.  
  11126. @Small_Header@<:#259,9360>Syntax
  11127.  
  11128. <:#202,9360><:f,QCourier,>U_FDL<:f><:f,QCourier,>(<:f><:f,QCourier,>)<:f>
  11129.  
  11130. @Indent_List@<:#240,9360>    No arguments are required
  11131.  
  11132. @Small_Header@<:#259,9360>Return Type & Value
  11133.  
  11134. @Indent_List@<:#245,9360><+!>INTEGER<-!>    Returns the current users total files downloaded.
  11135.  
  11136. @Small_Header@<:#259,9360>Remarks
  11137.  
  11138. <:#1210,9360>This function will return information that can be useful in modifying PCBoard's built in ratio management system and the view user information command.  Of course, it is not limited to that; anywhere you need to know how many files the current user has down
  11139. loaded, this function will provide that information.  Unlike the predefined 
  11140. <+!>U_...<-!> user variables, this function does not require the use of 
  11141. <+!>GETUSER<-!> to return valid information.
  11142.  
  11143. @Small_Header@<:#259,9360>Examples
  11144.  
  11145. @Example_Text@<:#168,9360>PRINTLN "You have ULed ",U_FUL()," bytes and DLed ",<+!>U_FDL()<-!>," files."
  11146.  
  11147. @Small_Header@<:#259,9360>See Also
  11148.  
  11149. <:#240,9360><-"><-"><-">
  11150.  
  11151. <:p<* >>
  11152.  
  11153. @Subhead@<:#360,9360>U_FSE   <+">VARIABLE<-">
  11154.  
  11155. @Small_Header@<:#259,9360>Function
  11156.  
  11157. <:#240,9360>Allow reading and writing of the current users full screen editor default flag.
  11158.  
  11159. @Small_Header@<:#259,9360>Type & Value
  11160.  
  11161. @Indent_List@<:#245,9360><+!>BOOLEAN<-!>    The current users full screen editor default flag status (<+!>TRUE<-!> or 
  11162. <+!>FALSE<-!>).
  11163.  
  11164. @Small_Header@<:#259,9360>Remarks
  11165.  
  11166. <:#975,9360>This <+!>BOOLEAN<-!> is set with information from the current users record when the 
  11167. <+!>GETUSER<-!> statement is executed.  It may then be changed and written back to the users record with the 
  11168. <+!>PUTUSER<-!> statement.  Note that it is undefined until a <+!>GETUSER<-!> statement is processed and that changes are not written until a 
  11169. <+!>PUTUSER<-!> statement is processed.
  11170.  
  11171. @Small_Header@<:#259,9360>Examples
  11172.  
  11173. @Example_Text@<:#642,9360>GETUSER<**>PRINTLN "Turning on full screen editor as default..."<**>LET 
  11174. <+!>U_FSE<-!> = TRUE<**>PUTUSER
  11175.  
  11176. @Small_Header@<:#259,9360>See Also
  11177.  
  11178. <:#240,9360><+!>GETUSER <+">Statement<-">, <-!><+!>PUTUSER <+">Statement<-"><-!><-"><-">
  11179.  
  11180. <:p<* >>
  11181.  
  11182. @Subhead@<:#360,9360>U_FSEP   <+">VARIABLE<-">
  11183.  
  11184. @Small_Header@<:#259,9360>Function
  11185.  
  11186. <:#240,9360>Allow reading and writing of the current users full screen editor prompt flag.
  11187.  
  11188. @Small_Header@<:#259,9360>Type & Value
  11189.  
  11190. @Indent_List@<:#245,9360><+!>BOOLEAN<-!>    The current users full screen editor prompt flag status (<+!>TRUE<-!> or 
  11191. <+!>FALSE<-!>).
  11192.  
  11193. @Small_Header@<:#259,9360>Remarks
  11194.  
  11195. <:#975,9360>This <+!>BOOLEAN<-!> is set with information from the current users record when the 
  11196. <+!>GETUSER<-!> statement is executed.  It may then be changed and written back to the users record with the 
  11197. <+!>PUTUSER<-!> statement.  Note that it is undefined until a <+!>GETUSER<-!> statement is processed and that changes are not written until a 
  11198. <+!>PUTUSER<-!> statement is processed.
  11199.  
  11200. @Small_Header@<:#259,9360>Examples
  11201.  
  11202. @Example_Text@<:#642,9360>GETUSER<**>PRINTLN "Turning off full screen editor prompting..."<**>LET 
  11203. <+!>U_FSEP<-!> = FALSE<**>PUTUSER
  11204.  
  11205. @Small_Header@<:#259,9360>See Also
  11206.  
  11207. <:#240,9360><+!>GETUSER <+">Statement<-">, <-!><+!>PUTUSER <+">Statement<-"><-!><-"><-">
  11208.  
  11209. <:p<* >>
  11210.  
  11211. @Subhead@<:#360,9360>U_FUL()   <+">Function<-">
  11212.  
  11213. @Small_Header@<:#259,9360>Function
  11214.  
  11215. <:#240,9360>Access the total number of files uploaded by the current user.
  11216.  
  11217. @Small_Header@<:#259,9360>Syntax
  11218.  
  11219. <:#202,9360><:f,QCourier,>U_FUL<:f><:f,QCourier,>(<:f><:f,QCourier,>)<:f>
  11220.  
  11221. @Indent_List@<:#240,9360>    No arguments are required
  11222.  
  11223. @Small_Header@<:#259,9360>Return Type & Value
  11224.  
  11225. @Indent_List@<:#245,9360><+!>INTEGER<-!>    Returns the current users total files uploaded.
  11226.  
  11227. @Small_Header@<:#259,9360>Remarks
  11228.  
  11229. <:#1210,9360>This function will return information that can be useful in modifying PCBoard's built in ratio management system and the view user information command.  Of course, it is not limited to that; anywhere you need to know how many files the current user has uplo
  11230. aded, this function will provide that information.  Unlike the predefined 
  11231. <+!>U_...<-!> user variables, this function does not require the use of 
  11232. <+!>GETUSER<-!> to return valid information.
  11233.  
  11234. @Small_Header@<:#259,9360>Examples
  11235.  
  11236. @Example_Text@<:#168,9360>PRINTLN "You have ULed ",<+!>U_FUL()<-!>," bytes and DLed ",U_FDL()," files."
  11237.  
  11238. @Small_Header@<:#259,9360>See Also
  11239.  
  11240. <:#240,9360><-"><-"><-">
  11241.  
  11242. <:p<* >>
  11243.  
  11244. @Subhead@<:#360,9360>U_HVPHONE   <+">VARIABLE<-">
  11245.  
  11246. @Small_Header@<:#259,9360>Function
  11247.  
  11248. <:#240,9360>Allow reading and writing of the current users home/voice phone number.
  11249.  
  11250. @Small_Header@<:#259,9360>Type & Value
  11251.  
  11252. @Indent_List@<:#245,9360><+!>STRING<-!>    The current users home/voice phone number (13 characters max).
  11253.  
  11254. @Small_Header@<:#259,9360>Remarks
  11255.  
  11256. <:#975,9360>This <+!>STRING<-!> is filled with information from the current users record when the 
  11257. <+!>GETUSER<-!> statement is executed.  It may then be changed and written back to the users record with the 
  11258. <+!>PUTUSER<-!> statement.  Note that it is empty until a <+!>GETUSER<-!> statement is processed and that changes are not written until a 
  11259. <+!>PUTUSER<-!> statement is processed.
  11260.  
  11261. @Small_Header@<:#259,9360>Examples
  11262.  
  11263. @Example_Text@<:#484,9360>GETUSER<**>PRINTLN "   Home/Voice Phone Number:  ",<+!>U_HVPHONE<-!><**>PRINTLN "Business/Data Phone Number:  ",U_BDPHONE
  11264.  
  11265. @Small_Header@<:#259,9360>See Also
  11266.  
  11267. <:#240,9360><+!>GETUSER <+">Statement<-">, <-!><+!>PUTUSER <+">Statement<-"><-!><-"><-">
  11268.  
  11269. <:p<* >>
  11270.  
  11271. @Subhead@<:#360,9360>U_INCONF()   <+">Function<-">
  11272.  
  11273. @Small_Header@<:#259,9360>Function
  11274.  
  11275. <:#240,9360>Determine if a user is registered in a conference.
  11276.  
  11277. @Small_Header@<:#259,9360>Syntax
  11278.  
  11279. <:#202,9360><:f,QCourier,>U_INCONF<:f><:f,QCourier,>(<:f><:f,QCourier,>rec,conf)<:f>
  11280.  
  11281. @Indent_List@<:#240,9360>    <:f,QCourier,>rec<:f>    An integer expression with the record number of the user to check.
  11282.  
  11283. @Indent_List@<:#240,9360>    <:f,QCourier,>conf<:f>    An integer expression with the conference number to check.
  11284.  
  11285. @Small_Header@<:#259,9360>Return Type & Value
  11286.  
  11287. @Indent_List@<:#485,9360><+!>BOOLEAN<-!>    Returns <+!>TRUE<-!> if the user is registered in the specified conference, 
  11288. <+!>FALSE<-!> otherwise.
  11289.  
  11290. @Small_Header@<:#259,9360>Remarks
  11291.  
  11292. <:#970,9360>It is sometimes necessary to know if a user is registered in a conference (for example, when entering a message to a particular user).  This function will return 
  11293. <+!>TRUE<-!> if the user is registered in the conference specified.  Before calling this function you need to find the users record number from the USERS file with the 
  11294. <+!>U_RECNUM()<-!> function.
  11295.  
  11296. @Small_Header@<:#259,9360>Examples
  11297.  
  11298. @Example_Text@<:#1590,9360>INTEGER i,rec<**>STRING  un,ynStr(1)<**>LET ynStr(0) = "NO"<**>LET ynStr(1) = "YES"<**>INPUT "User name",un<**>NEWLINE<**>LET rec = U_RECNUM(un)<**>FOR i = 1 TO 10<**>  PRINTLN un," in conf ",i,":  ",ynStr(<+!>U_INCONF(i,rec)<-!>)<**>NEXT
  11299.  
  11300. @Small_Header@<:#259,9360>See Also
  11301.  
  11302. <:#240,9360><-"><-"><-"><-"><+!>U_RECNUM() <+">Function<-"><-!>
  11303.  
  11304. <:p<* >>
  11305.  
  11306. @Subhead@<:#360,9360>U_LDATE()   <+">Function<-">
  11307.  
  11308. @Small_Header@<:#259,9360>Function
  11309.  
  11310. <:#240,9360>Access the last log on date of a user.
  11311.  
  11312. @Small_Header@<:#259,9360>Syntax
  11313.  
  11314. <:#202,9360><:f,QCourier,>U_LDATE<:f><:f,QCourier,>(<:f><:f,QCourier,>)<:f>
  11315.  
  11316. @Indent_List@<:#240,9360>    No arguments are required
  11317.  
  11318. @Small_Header@<:#259,9360>Return Type & Value
  11319.  
  11320. @Indent_List@<:#245,9360><+!>DATE<-!>    Returns the current users last log on date.
  11321.  
  11322. @Small_Header@<:#259,9360>Remarks
  11323.  
  11324. <:#730,9360>PCBoard tracks the last log on date for each user.  This function will return that date for the user currently online.  Unlike the predefined 
  11325. <+!>U_...<-!> user variables, this function does not require the use of 
  11326. <+!>GETUSER<-!> to return valid information.
  11327.  
  11328. @Small_Header@<:#259,9360>Examples
  11329.  
  11330. @Example_Text@<:#168,9360>PRINTLN "You last logged on ",<+!>U_LDATE()<-!>,"."
  11331.  
  11332. @Small_Header@<:#259,9360>See Also
  11333.  
  11334. <:#240,9360><-"><-"><-"><-">
  11335.  
  11336. <:p<* >>
  11337.  
  11338. @Subhead@<:#360,9360>U_LDIR()   <+">Function<-">
  11339.  
  11340. @Small_Header@<:#259,9360>Function
  11341.  
  11342. <:#240,9360>Access the latest file date found in a file scan by a user.
  11343.  
  11344. @Small_Header@<:#259,9360>Syntax
  11345.  
  11346. <:#202,9360><:f,QCourier,>U_LDIR<:f><:f,QCourier,>(<:f><:f,QCourier,>)<:f>
  11347.  
  11348. @Indent_List@<:#240,9360>    No arguments are required
  11349.  
  11350. @Small_Header@<:#259,9360>Return Type & Value
  11351.  
  11352. @Indent_List@<:#245,9360><+!>DATE<-!>    Returns the latest file date found by the current user.
  11353.  
  11354. @Small_Header@<:#259,9360>Remarks
  11355.  
  11356. <:#730,9360>PCBoard tracks the latest file found by each user.  This function will return that date for the user currently online.  Unlike the predefined 
  11357. <+!>U_...<-!> user variables, this function does not require the use of 
  11358. <+!>GETUSER<-!> to return valid information.
  11359.  
  11360. @Small_Header@<:#259,9360>Examples
  11361.  
  11362. @Example_Text@<:#168,9360>PRINTLN "Latest file found was dated ",<+!>U_LDIR()<-!>,"."
  11363.  
  11364. @Small_Header@<:#259,9360>See Also
  11365.  
  11366. <:#240,9360><-"><-"><-"><-">
  11367.  
  11368. <:p<* >>
  11369.  
  11370. @Subhead@<:#360,9360>U_LOGONS()   <+">Function<-">
  11371.  
  11372. @Small_Header@<:#259,9360>Function
  11373.  
  11374. <:#240,9360>Access the total number of system logons by the current user.
  11375.  
  11376. @Small_Header@<:#259,9360>Syntax
  11377.  
  11378. <:#202,9360><:f,QCourier,>U_LOGONS<:f><:f,QCourier,>(<:f><:f,QCourier,>)<:f>
  11379.  
  11380. @Indent_List@<:#240,9360>    No arguments are required
  11381.  
  11382. @Small_Header@<:#259,9360>Return Type & Value
  11383.  
  11384. @Indent_List@<:#245,9360><+!>INTEGER<-!>    Returns the current users total system logons.
  11385.  
  11386. @Small_Header@<:#259,9360>Remarks
  11387.  
  11388. <:#730,9360>PCBoard tracks the total number of logons for each user.  This function will return that number for the user currently online.  Unlike the predefined 
  11389. <+!>U_...<-!> user variables, this function does not require the use of 
  11390. <+!>GETUSER<-!> to return valid information.
  11391.  
  11392. @Small_Header@<:#259,9360>Examples
  11393.  
  11394. @Example_Text@<:#168,9360>PRINTLN "You have logged on to @BOARDNAME@ ",<+!>U_LOGONS()<-!>," times."
  11395.  
  11396. @Small_Header@<:#259,9360>See Also
  11397.  
  11398. <:#240,9360><-"><-"><-">
  11399.  
  11400. <:p<* >>
  11401.  
  11402. @Subhead@<:#360,9360>U_LONGHDR   <+">VARIABLE<-">
  11403.  
  11404. @Small_Header@<:#259,9360>Function
  11405.  
  11406. <:#240,9360>Allow reading and writing of the current users long message header flag.
  11407.  
  11408. @Small_Header@<:#259,9360>Type & Value
  11409.  
  11410. @Indent_List@<:#245,9360><+!>BOOLEAN<-!>    The current users long message header flag status (<+!>TRUE<-!> or 
  11411. <+!>FALSE<-!>).
  11412.  
  11413. @Small_Header@<:#259,9360>Remarks
  11414.  
  11415. <:#975,9360>This <+!>BOOLEAN<-!> is set with information from the current users record when the 
  11416. <+!>GETUSER<-!> statement is executed.  It may then be changed and written back to the users record with the 
  11417. <+!>PUTUSER<-!> statement.  Note that it is undefined until a <+!>GETUSER<-!> statement is processed and that changes are not written until a 
  11418. <+!>PUTUSER<-!> statement is processed.
  11419.  
  11420. @Small_Header@<:#259,9360>Examples
  11421.  
  11422. @Example_Text@<:#642,9360>GETUSER<**>PRINTLN "Turning on long message headers..."<**>LET <+!>U_LONGHDR<-!> = TRUE<**>PUTUSER
  11423.  
  11424. @Small_Header@<:#259,9360>See Also
  11425.  
  11426. <:#240,9360><+!>GETUSER <+">Statement<-">, <-!><+!>PUTUSER <+">Statement<-"><-!><-"><-">
  11427.  
  11428. <:p<* >>
  11429.  
  11430. @Subhead@<:#360,9360>U_LTIME()   <+">Function<-">
  11431.  
  11432. @Small_Header@<:#259,9360>Function
  11433.  
  11434. <:#240,9360>Access the time of day that a user last logged on.
  11435.  
  11436. @Small_Header@<:#259,9360>Syntax
  11437.  
  11438. <:#202,9360><:f,QCourier,>U_LTIME<:f><:f,QCourier,>(<:f><:f,QCourier,>)<:f>
  11439.  
  11440. @Indent_List@<:#240,9360>    No arguments are required
  11441.  
  11442. @Small_Header@<:#259,9360>Return Type & Value
  11443.  
  11444. @Indent_List@<:#245,9360><+!>TIME<-!>    Returns the time of day of the current users last log on.
  11445.  
  11446. @Small_Header@<:#259,9360>Remarks
  11447.  
  11448. <:#730,9360>PCBoard tracks the last time of day of the last log on for each user.  This function will return that time for the user currently online.  Unlike the predefined 
  11449. <+!>U_...<-!> user variables, this function does not require the use of 
  11450. <+!>GETUSER<-!> to return valid information.
  11451.  
  11452. @Small_Header@<:#259,9360>Examples
  11453.  
  11454. @Example_Text@<:#168,9360>PRINTLN "You last logged on at ",<+!>U_LTIME()<-!>,"."
  11455.  
  11456. @Small_Header@<:#259,9360>See Also
  11457.  
  11458. <:#240,9360><-"><-"><-"><-">
  11459.  
  11460. <:p<* >>
  11461.  
  11462. @Subhead@<:#360,9360>U_MSGRD()   <+">Function<-">
  11463.  
  11464. @Small_Header@<:#259,9360>Function
  11465.  
  11466. <:#240,9360>Access the total number of messages read by the current user.
  11467.  
  11468. @Small_Header@<:#259,9360>Syntax
  11469.  
  11470. <:#202,9360><:f,QCourier,>U_MSGRD<:f><:f,QCourier,>(<:f><:f,QCourier,>)<:f>
  11471.  
  11472. @Indent_List@<:#240,9360>    No arguments are required
  11473.  
  11474. @Small_Header@<:#259,9360>Return Type & Value
  11475.  
  11476. @Indent_List@<:#245,9360><+!>INTEGER<-!>    Returns the current users total messages read.
  11477.  
  11478. @Small_Header@<:#259,9360>Remarks
  11479.  
  11480. <:#970,9360>PCBoard tracks the total number of messages read by each user.  This function will return that number for the user currently online.  One quick idea for use:  a message/file ratio enforcement door.  Unlike the predefined 
  11481. <+!>U_...<-!> user variables, this function does not require the use of 
  11482. <+!>GETUSER<-!> to return valid information.
  11483.  
  11484. @Small_Header@<:#259,9360>Examples
  11485.  
  11486. @Example_Text@<:#642,9360>IF ((<+!>U_MSGRD()<-!>+U_MSGWR())/U_FDL() <;> 10) THEN<**>  PRINTLN "You need to do more messaging!!!"<**>  END<**>ENDIF
  11487.  
  11488. @Small_Header@<:#259,9360>See Also
  11489.  
  11490. <:#240,9360><-"><-"><-">
  11491.  
  11492. <:p<* >>
  11493.  
  11494. @Subhead@<:#360,9360>U_MSGWR()   <+">Function<-">
  11495.  
  11496. @Small_Header@<:#259,9360>Function
  11497.  
  11498. <:#240,9360>Access the total number of messages written by the current user.
  11499.  
  11500. @Small_Header@<:#259,9360>Syntax
  11501.  
  11502. <:#202,9360><:f,QCourier,>U_MSGWR<:f><:f,QCourier,>(<:f><:f,QCourier,>)<:f>
  11503.  
  11504. @Indent_List@<:#240,9360>    No arguments are required
  11505.  
  11506. @Small_Header@<:#259,9360>Return Type & Value
  11507.  
  11508. @Indent_List@<:#245,9360><+!>INTEGER<-!>    Returns the current users total messages written.
  11509.  
  11510. @Small_Header@<:#259,9360>Remarks
  11511.  
  11512. <:#970,9360>PCBoard tracks the total number of messages written by each user.  This function will return that number for the user currently online.  One quick idea for use:  a message/file ratio enforcement door.  Unlike the predefined 
  11513. <+!>U_...<-!> user variables, this function does not require the use of 
  11514. <+!>GETUSER<-!> to return valid information.
  11515.  
  11516. @Small_Header@<:#259,9360>Examples
  11517.  
  11518. @Example_Text@<:#642,9360>IF ((U_MSGRD()+<+!>U_MSGWR()<-!>)/U_FDL() <;> 10) THEN<**>  PRINTLN "You need to do more messaging!!!"<**>  END<**>ENDIF
  11519.  
  11520. @Small_Header@<:#259,9360>See Also
  11521.  
  11522. <:#240,9360><-"><-"><-">
  11523.  
  11524. <:p<* >>
  11525.  
  11526. @Subhead@<:#360,9360>U_NAME()   <+">Function<-">
  11527.  
  11528. @Small_Header@<:#259,9360>Function
  11529.  
  11530. <:#240,9360>Access the current users name.
  11531.  
  11532. @Small_Header@<:#259,9360>Syntax
  11533.  
  11534. <:#202,9360><:f,QCourier,>U_NAME<:f><:f,QCourier,>(<:f><:f,QCourier,>)<:f>
  11535.  
  11536. @Indent_List@<:#240,9360>    No arguments are required
  11537.  
  11538. @Small_Header@<:#259,9360>Return Type & Value
  11539.  
  11540. @Indent_List@<:#245,9360><+!>STRING<-!>    Returns a string with the current users name.
  11541.  
  11542. @Small_Header@<:#259,9360>Remarks
  11543.  
  11544. <:#1205,9360>Perhaps the most important piece of information about a caller is his name.  The user name differentiates a user from every other user on the BBS and can be used to track PPE user information that must be kept separate from all other users information.  Unl
  11545. ike the predefined <+!>U_...<-!> user variables, this function does not require the use of 
  11546. <+!>GETUSER<-!> to return valid information.
  11547.  
  11548. @Small_Header@<:#259,9360>Examples
  11549.  
  11550. @Example_Text@<:#1116,9360>IF (<+!>U_NAME()<-!> = "JOHN DOE) THEN<**>  PRINTLN "I know who you are!  Welcome!"<**>  GETUSER<**>  LET U_SEC = 110<**>  PUTUSER<**>  PRINTLN "Automatically upgraded!"<**>ENDIF
  11551.  
  11552. @Small_Header@<:#259,9360>See Also
  11553.  
  11554. <:#240,9360><-"><-">
  11555.  
  11556. <:p<* >>
  11557.  
  11558. @Subhead@<:#360,9360>U_NOTES()   <+">VARIABLE ARRAY<-">
  11559.  
  11560. @Small_Header@<:#259,9360>Function
  11561.  
  11562. <:#240,9360>Allow reading and writing of current user notes.
  11563.  
  11564. @Small_Header@<:#259,9360>Type & Value
  11565.  
  11566. <:#240,9360><+!>STRING<-!>
  11567.  
  11568. @Indent_List@<:#240,9360>    Subscript 0-4    SysOp defineable user notes (60 characters max).
  11569.  
  11570. @Small_Header@<:#259,9360>Remarks
  11571.  
  11572. <:#1460,9360>This array is filled with information from the current users record when the 
  11573. <+!>GETUSER<-!> statement is executed.  It may then be changed and written back to the users record with the 
  11574. <+!>PUTUSER<-!> statement.  Note that the array is empty until a <+!>GETUSER<-!> statement is processed and that changes are not written until a 
  11575. <+!>PUTUSER<-!> statement is processed.  Additionally, the array will only have meaningful information if the notes PSA is installed.  The existence of the notes PSA may be checked with the 
  11576. <+!>PSA()<-!> function.
  11577.  
  11578. @Small_Header@<:#259,9360>Examples
  11579.  
  11580. @Example_Text@<:#1116,9360>INTEGER i<**>IF (PSA(6)) THEN<**>  GETUSER<**>  FOR i = 0 TO 4<**>    PRINTLN "Note ",i+1,":  ",<+!>U_NOTES(i)<-!><**>  NEXT<**>ENDIF
  11581.  
  11582. @Small_Header@<:#259,9360>See Also
  11583.  
  11584. <:#240,9360><+!>GETUSER <+">Statement<-">, PSA() <+">Function<-">, PUTUSER <+">Statement<-"><-!><-"><-">
  11585.  
  11586. <:p<* >>
  11587.  
  11588. @Subhead@<:#360,9360>U_PAGELEN   <+">VARIABLE<-">
  11589.  
  11590. @Small_Header@<:#259,9360>Function
  11591.  
  11592. <:#240,9360>Allow reading and writing of the current users page length setting.
  11593.  
  11594. @Small_Header@<:#259,9360>Type & Value
  11595.  
  11596. @Indent_List@<:#245,9360><+!>INTEGER<-!>    The current users page length (0 - 255).
  11597.  
  11598. @Small_Header@<:#259,9360>Remarks
  11599.  
  11600. <:#975,9360>This integer is set with information from the current users record when the 
  11601. <+!>GETUSER<-!> statement is executed.  It may then be changed and written back to the users record with the 
  11602. <+!>PUTUSER<-!> statement.  Note that it is undefined until a <+!>GETUSER<-!> statement is processed and that changes are not written until a 
  11603. <+!>PUTUSER<-!> statement is processed.
  11604.  
  11605. @Small_Header@<:#259,9360>Examples
  11606.  
  11607. @Example_Text@<:#820,9360>GETUSER<**>PRINTLN "Your page length was ",<+!>U_PAGELEN<-!><**>LET 
  11608. <+!>U_PAGELEN<-!> = 20<**>PRINTLN "Your page length is now ",<+!>U_PAGELEN<-!><**>PUTUSER
  11609.  
  11610. @Small_Header@<:#259,9360>See Also
  11611.  
  11612. <:#240,9360><+!>GETUSER <+">Statement<-">, <-!><+!>PUTUSER <+">Statement<-"><-!><-"><-">
  11613.  
  11614. <:p<* >>
  11615.  
  11616. @Subhead@<:#360,9360>U_PWD   <+">VARIABLE<-">
  11617.  
  11618. @Small_Header@<:#259,9360>Function
  11619.  
  11620. <:#240,9360>Allow reading and writing of the current users password.
  11621.  
  11622. @Small_Header@<:#259,9360>Type & Value
  11623.  
  11624. @Indent_List@<:#245,9360><+!>STRING<-!>    The current users password (12 characters max).
  11625.  
  11626. @Small_Header@<:#259,9360>Remarks
  11627.  
  11628. <:#1460,9360>This <+!>STRING<-!> is filled with information from the current users record when the 
  11629. <+!>GETUSER<-!> statement is executed.  It may then be changed and written back to the users record with the 
  11630. <+!>PUTUSER<-!> statement.  Note that it is empty until a <+!>GETUSER<-!> statement is processed and that changes are not written until a 
  11631. <+!>PUTUSER<-!> statement is processed.  A mask of valid characters that may be used in the 
  11632. <+!>U_PWD<-!></`>variable is available via the <+!>MASK_PWD<-!> function.
  11633.  
  11634. @Small_Header@<:#259,9360>Examples
  11635.  
  11636. @Example_Text@<:#1116,9360>STRING s<**>INPUT "Enter Password",s,@X0E,12,MASK_PWD(),UPCASE<**>GETUSER<**>IF (s <<<;> 
  11637. <+!>U_PWD<-!>) THEN<**>  PRINTLN "Sorry, hanging up"<**>  HANGUP<**>ENDIF
  11638.  
  11639. @Small_Header@<:#259,9360>See Also
  11640.  
  11641. <:#240,9360><+!>GETUSER <+">Statement<-">, <-!><+!>MASK_PWD() <+">Function<-">, PUTUSER 
  11642. <+">Statement<-"><-!><-"><-">
  11643.  
  11644. <:p<* >>
  11645.  
  11646. @Subhead@<:#360,9360>U_PWDEXP   <+">VARIABLE<-">
  11647.  
  11648. @Small_Header@<:#259,9360>Function
  11649.  
  11650. <:#240,9360>Allow reading and writing of the current users password expiration date.
  11651.  
  11652. @Small_Header@<:#259,9360>Type & Value
  11653.  
  11654. @Indent_List@<:#245,9360><+!>DATE<-!>    The current users password expiration date.
  11655.  
  11656. @Small_Header@<:#259,9360>Remarks
  11657.  
  11658. <:#1460,9360>This <+!>DATE<-!> is set with information from the current users record when the 
  11659. <+!>GETUSER<-!> statement is executed.  It may then be changed and written back to the users record with the 
  11660. <+!>PUTUSER<-!> statement.  Note that it is undefined until a <+!>GETUSER<-!> statement is processed and that changes are not written until a 
  11661. <+!>PUTUSER<-!> statement is processed.  Additionally, it will only have meaningful information if the password PSA is installed.  The existence of the password PSA may be checked with the 
  11662. <+!>PSA()<-!> function.
  11663.  
  11664. @Small_Header@<:#259,9360>Examples
  11665.  
  11666. @Example_Text@<:#1126,9360>IF (PSA(4)) THEN<**>  GETUSER<**>  PRINTLN <+!>U_PWDEXP<-!>-DATE()," until current password expiration"<**>  LET 
  11667. <+!>U_PWDEXP<-!> = DATE()+30<**>  PRINTLN "You now have 30 days until you *MUST* change you password."<**>  PUTUSER<**>ENDIF
  11668.  
  11669. @Small_Header@<:#259,9360>See Also
  11670.  
  11671. <:#240,9360><+!>GETUSER <+">Statement<-">, <-!><+!>PSA() <+">Function<-">, PUTUSER 
  11672. <+">Statement<-"><-!><-"><-">
  11673.  
  11674. <:p<* >>
  11675.  
  11676. @Subhead@<:#360,9360>U_PWDHIST()   <+">Function<-">
  11677.  
  11678. @Small_Header@<:#259,9360>Function
  11679.  
  11680. <:#240,9360>Access the last three passwords used by the current user.
  11681.  
  11682. @Small_Header@<:#259,9360>Syntax
  11683.  
  11684. <:#202,9360><:f,QCourier,>U_PWDHIST<:f><:f,QCourier,>(<:f><:f,QCourier,>num)<:f>
  11685.  
  11686. @Indent_List@<:#240,9360>    <:f,QCourier,>num<:f>    The number of the password from the history to return (1 through 3).
  11687.  
  11688. @Small_Header@<:#259,9360>Return Type & Value
  11689.  
  11690. @Indent_List@<:#485,9360><+!>STRING<-!>    Returns the specified password from the history (1 for the most recent, 3 for the least recent).
  11691.  
  11692. @Small_Header@<:#259,9360>Remarks
  11693.  
  11694. <:#1450,9360>PCBoard has the ability to track the last three passwords used by each user.  This function will return one of those passwords from the history for the user currently online.  Unlike the predefined 
  11695. <+!>U_...<-!> user variables, this function does not require the use of 
  11696. <+!>GETUSER<-!> to return valid information.  However, it does require that the password PSA has been installed to return meaningful information.  The existence of the password PSA may be checked via the 
  11697. <+!>PSA()<-!> function.
  11698.  
  11699. @Small_Header@<:#259,9360>Examples
  11700.  
  11701. @Example_Text@<:#958,9360>INTEGER i<**>IF (PSA(4)) THEN<**>  FOR i = 1 TO 3<**>    PRINTLN "Password history ",i,":  ",<+!>U_PWDHIST(i)<-!><**>  NEXT<**>ENDIF
  11702.  
  11703. @Small_Header@<:#259,9360>See Also
  11704.  
  11705. <:#240,9360><-"><-"><-"><+!>PSA() <+">Function<-"><-!>
  11706.  
  11707. <:p<* >>
  11708.  
  11709. @Subhead@<:#360,9360>U_PWDLC()   <+">Function<-">
  11710.  
  11711. @Small_Header@<:#259,9360>Function
  11712.  
  11713. <:#240,9360>Access the last date the user changed his password.
  11714.  
  11715. @Small_Header@<:#259,9360>Syntax
  11716.  
  11717. <:#202,9360><:f,QCourier,>U_PWDLC<:f><:f,QCourier,>(<:f><:f,QCourier,>)<:f>
  11718.  
  11719. @Indent_List@<:#240,9360>    No arguments are required
  11720.  
  11721. @Small_Header@<:#259,9360>Return Type & Value
  11722.  
  11723. @Indent_List@<:#245,9360><+!>DATE<-!>    Returns the last date the user changed his password.
  11724.  
  11725. @Small_Header@<:#259,9360>Remarks
  11726.  
  11727. <:#1215,9360>PCBoard has the ability to track the last date of a password change for each user.  This function will return that date for the user currently online.  Unlike the predefined 
  11728. <+!>U_...<-!> user variables, this function does not require the use of 
  11729. <+!>GETUSER<-!> to return valid information.  However, it does require that the password PSA has been installed to return meaningful information.  The existence of the password PSA may be checked via the 
  11730. <+!>PSA()<-!> function.
  11731.  
  11732. @Small_Header@<:#259,9360>Examples
  11733.  
  11734. @Example_Text@<:#168,9360>IF (PSA(4)) PRINTLN "You last changed your password on ",<+!>U_PWDLC()<-!>,"."
  11735.  
  11736. @Small_Header@<:#259,9360>See Also
  11737.  
  11738. <:#240,9360><-"><-"><-"><+!>PSA() <+">Function<-"><-!>
  11739.  
  11740. <:p<* >>
  11741.  
  11742. @Subhead@<:#360,9360>U_PWDTC()   <+">Function<-">
  11743.  
  11744. @Small_Header@<:#259,9360>Function
  11745.  
  11746. <:#240,9360>Access the number of times the user has changed his password.
  11747.  
  11748. @Small_Header@<:#259,9360>Syntax
  11749.  
  11750. <:#202,9360><:f,QCourier,>U_PWDTC<:f><:f,QCourier,>(<:f><:f,QCourier,>)<:f>
  11751.  
  11752. @Indent_List@<:#240,9360>    No arguments are required
  11753.  
  11754. @Small_Header@<:#259,9360>Return Type & Value
  11755.  
  11756. @Indent_List@<:#245,9360><+!>INTEGER<-!>    Returns the number of times the user has changed his password.
  11757.  
  11758. @Small_Header@<:#259,9360>Remarks
  11759.  
  11760. <:#1455,9360>PCBoard has the ability to track the total number of times each user changes his password.  This function will return that count for the user currently online.  Unlike the predefined 
  11761. <+!>U_...<-!> user variables, this function does not require the use of 
  11762. <+!>GETUSER<-!> to return valid information.  However, it does require that the password PSA has been installed to return meaningful information.  The existence of the password PSA may be checked via the 
  11763. <+!>PSA()<-!> function.
  11764.  
  11765. @Small_Header@<:#259,9360>Examples
  11766.  
  11767. @Example_Text@<:#484,9360>IF (PSA(4)) THEN<**>  PRINTLN "You have changed your password ",<+!>U_PWDTC()<-!>," times."<**>ENDIF
  11768.  
  11769. @Small_Header@<:#259,9360>See Also
  11770.  
  11771. <:#240,9360><-"><-"><-"><+!>PSA() <+">Function<-"><-!>
  11772.  
  11773. <:p<* >>
  11774.  
  11775. @Subhead@<:#360,9360>U_RECNUM()   <+">Function<-">
  11776.  
  11777. @Small_Header@<:#259,9360>Function
  11778.  
  11779. <:#240,9360>Determine if a user is registered on the system and what the record number is.
  11780.  
  11781. @Small_Header@<:#259,9360>Syntax
  11782.  
  11783. <:#202,9360><:f,QCourier,>U_RECNUM<:f><:f,QCourier,>(<:f><:f,QCourier,>user)<:f>
  11784.  
  11785. @Indent_List@<:#240,9360>    <:f,QCourier,>user<:f>    A string expression with the user name to search for.
  11786.  
  11787. @Small_Header@<:#259,9360>Return Type & Value
  11788.  
  11789. @Indent_List@<:#485,9360><+!>INTEGER<-!>    Returns the record number of the user in the USERS file if found or -1 if not found.
  11790.  
  11791. @Small_Header@<:#259,9360>Remarks
  11792.  
  11793. <:#965,9360>This function serves two purposes.  The first is to determine whether or not a given user name is registered on the system.  If the value -1 is returned the user isn't in the user files.  The second use is to get the users record number for the 
  11794. <+!>U_INCONF()<-!> function to determine whether or not a user is registered in a given conference.
  11795.  
  11796. @Small_Header@<:#259,9360>Examples
  11797.  
  11798. @Example_Text@<:#1590,9360>INTEGER i,rec<**>STRING  un,ynStr(1)<**>LET ynStr(0) = "NO"<**>LET ynStr(1) = "YES"<**>INPUT "User name",un<**>NEWLINE<**>LET rec = 
  11799. <+!>U_RECNUM(un)<-!><**>FOR i = 1 TO 10<**>  PRINTLN un," in conf ",i,":  ",ynStr(U_INCONF(i,rec))<**>NEXT
  11800.  
  11801. @Small_Header@<:#259,9360>See Also
  11802.  
  11803. <:#240,9360><-"><-"><-"><-"><+!>U_INCONF() <+">Function<-"><-!>
  11804.  
  11805. <:p<* >>
  11806.  
  11807. @Subhead@<:#360,9360>U_SCROLL   <+">VARIABLE<-">
  11808.  
  11809. @Small_Header@<:#259,9360>Function
  11810.  
  11811. <:#240,9360>Allow reading and writing of the current users multi-screen message scroll flag.
  11812.  
  11813. @Small_Header@<:#259,9360>Type & Value
  11814.  
  11815. @Indent_List@<:#245,9360><+!>BOOLEAN<-!>    The current users scroll flag status (<+!>TRUE<-!> or 
  11816. <+!>FALSE<-!>).
  11817.  
  11818. @Small_Header@<:#259,9360>Remarks
  11819.  
  11820. <:#975,9360>This <+!>BOOLEAN<-!> is set with information from the current users record when the 
  11821. <+!>GETUSER<-!> statement is executed.  It may then be changed and written back to the users record with the 
  11822. <+!>PUTUSER<-!> statement.  Note that it is undefined until a <+!>GETUSER<-!> statement is processed and that changes are not written until a 
  11823. <+!>PUTUSER<-!> statement is processed.
  11824.  
  11825. @Small_Header@<:#259,9360>Examples
  11826.  
  11827. @Example_Text@<:#642,9360>GETUSER<**>PRINTLN "Turning off message scrolling..."<**>LET <+!>U_SCROLL<-!> = FALSE<**>PUTUSER
  11828.  
  11829. @Small_Header@<:#259,9360>See Also
  11830.  
  11831. <:#240,9360><+!>GETUSER <+">Statement<-">, <-!><+!>PUTUSER <+">Statement<-"><-!><-"><-">
  11832.  
  11833. <:p<* >>
  11834.  
  11835. @Subhead@<:#360,9360>U_SEC   <+">VARIABLE<-">
  11836.  
  11837. @Small_Header@<:#259,9360>Function
  11838.  
  11839. <:#240,9360>Allow reading and writing of the current users security level.
  11840.  
  11841. @Small_Header@<:#259,9360>Type & Value
  11842.  
  11843. @Indent_List@<:#245,9360><+!>INTEGER<-!>    The current users security level (0 - 255).
  11844.  
  11845. @Small_Header@<:#259,9360>Remarks
  11846.  
  11847. <:#975,9360>This <+!>INTEGER<-!> is set with information from the current users record when the 
  11848. <+!>GETUSER<-!> statement is executed.  It may then be changed and written back to the users record with the 
  11849. <+!>PUTUSER<-!> statement.  Note that it is undefined until a <+!>GETUSER<-!> statement is processed and that changes are not written until a 
  11850. <+!>PUTUSER<-!> statement is processed.
  11851.  
  11852. @Small_Header@<:#259,9360>Examples
  11853.  
  11854. @Example_Text@<:#800,9360>GETUSER<**>PRINTLN "Raising your security to level 20..."<**>LET <+!>U_SEC<-!> = 20<**>PUTUSER<**>PRINTLN "Automatic upgrade complete!"
  11855.  
  11856. @Small_Header@<:#259,9360>See Also
  11857.  
  11858. <:#240,9360><+!>GETUSER <+">Statement<-">, <-!><+!>PUTUSER <+">Statement<-"><-!><-"><-">
  11859.  
  11860. <:p<* >>
  11861.  
  11862. @Subhead@<:#360,9360>U_STAT()   <+">Function<-">
  11863.  
  11864. @Small_Header@<:#259,9360>Function
  11865.  
  11866. <:#240,9360>Access a statistic about the current user.
  11867.  
  11868. @Small_Header@<:#259,9360>Syntax
  11869.  
  11870. <:#202,9360><:f,QCourier,>U_TIMEON<:f><:f,QCourier,>(<:f><:f,QCourier,>stat)<:f>
  11871.  
  11872. @Indent_List@<:#240,9360>    <:f,QCourier,>stat<:f>    The statistic to retrieve (1 through 15).
  11873.  
  11874. @Small_Header@<:#259,9360>Return Type & Value
  11875.  
  11876. @Indent_List@<:#245,9360><+!>DATE<-!>    Returns the first date the user called the system if stat is 1.
  11877.  
  11878. @Indent_List@<:#245,9360><+!>INTEGER<-!>    Returns one of the following for all other values of stat:
  11879.  
  11880. @Indent_List@<:#240,9360>    2    The number of times the user has paged the SysOp;
  11881.  
  11882. @Indent_List@<:#240,9360>    3    The number of group chats the user has participated in;
  11883.  
  11884. @Indent_List@<:#240,9360>    4    The number of comments left by the user;
  11885.  
  11886. @Indent_List@<:#240,9360>    5    The number of 300 bps connects by the user;
  11887.  
  11888. @Indent_List@<:#240,9360>    6    The number of 1200 bps connects by the user;
  11889.  
  11890. @Indent_List@<:#240,9360>    7    The number of 2400 bps connects by the user;
  11891.  
  11892. @Indent_List@<:#480,9360>    8    The number of connects by the user greater than 2400 bps and less than or equal to 9600 bps (9600 bps <;>= connect speed <;> 2400 bps);
  11893.  
  11894. @Indent_List@<:#480,9360>    9    The number of connects by the user greater than 9600 bps and less than or equal to 14,400 bps (14,400 bps <;>= connect speed <;> 9600 bps);
  11895.  
  11896. @Indent_List@<:#240,9360>    10    The number of security violations by the user;
  11897.  
  11898. @Indent_List@<:#240,9360>    11    The number of "not registered in conference" warnings to the user;
  11899.  
  11900. @Indent_List@<:#240,9360>    12    The number of times the user's download limit has been reached;
  11901.  
  11902. @Indent_List@<:#240,9360>    13    The number of "file not found" warnings to the user;
  11903.  
  11904. @Indent_List@<:#240,9360>    14    The number of password errors to access the user's account;
  11905.  
  11906. @Indent_List@<:#240,9360>    15    The number of verify errors to access the user's account.
  11907.  
  11908. @Small_Header@<:#259,9360>Remarks
  11909.  
  11910. <:#1215,9360>PCBoard has the ability to track a number of statistics about the user.  This function will return the desired statistic for the user currently online.  Unlike the predefined 
  11911. <+!>U_...<-!> user variables, this function does not require the use of 
  11912. <+!>GETUSER<-!> to return valid information.  However, it does require that the statistics PSA has been installed to return meaningful information.  The existence of the statistics PSA may be checked via the 
  11913. <+!>PSA()<-!> function.
  11914.  
  11915. @Small_Header@<:#259,9360>Examples
  11916.  
  11917. @Example_Text@<:#1274,9360>STRING  label<**>INTEGER i<**>FOPEN 1,PPEPATH()+"STATTEXT",O_RD,S_DN<**>FOR i = 1 TO 15<**>  FGET 1,label<**>  PRINTLN label," - ",<+!>U_STAT(i)<-!><**>NEXT<**>FCLOSE 1
  11918.  
  11919. @Small_Header@<:#259,9360>See Also
  11920.  
  11921. <:#240,9360><-"><-"><-"><-"><+!>PSA() <+">Function<-"><-!>
  11922.  
  11923. <:p<* >>
  11924.  
  11925. @Subhead@<:#360,9360>U_TIMEON()   <+">Function<-">
  11926.  
  11927. @Small_Header@<:#259,9360>Function
  11928.  
  11929. <:#240,9360>Access the users time online today in minutes.
  11930.  
  11931. @Small_Header@<:#259,9360>Syntax
  11932.  
  11933. <:#202,9360><:f,QCourier,>U_TIMEON<:f><:f,QCourier,>(<:f><:f,QCourier,>)<:f>
  11934.  
  11935. @Indent_List@<:#240,9360>    No arguments are required
  11936.  
  11937. @Small_Header@<:#259,9360>Return Type & Value
  11938.  
  11939. @Indent_List@<:#245,9360><+!>INTEGER<-!>    Returns the users time online today in minutes.
  11940.  
  11941. @Small_Header@<:#259,9360>Remarks
  11942.  
  11943. <:#730,9360>PCBoard tracks the users time online each day.  This function will return the elapsed time for the user currently online.  Unlike the predefined 
  11944. <+!>U_...<-!> user variables, this function does not require the use of 
  11945. <+!>GETUSER<-!> to return valid information.
  11946.  
  11947. @Small_Header@<:#259,9360>Examples
  11948.  
  11949. @Example_Text@<:#168,9360>PRINTLN "You have been online for ",<+!>U_TIMEON()<-!>," total minutes today."
  11950.  
  11951. @Small_Header@<:#259,9360>See Also
  11952.  
  11953. <:#240,9360><-"><-"><-"><-">
  11954.  
  11955. <:p<* >>
  11956.  
  11957. @Subhead@<:#360,9360>U_TRANS   <+">VARIABLE<-">
  11958.  
  11959. @Small_Header@<:#259,9360>Function
  11960.  
  11961. <:#240,9360>Allow reading and writing of the current users default transfer protocol letter.
  11962.  
  11963. @Small_Header@<:#259,9360>Type & Value
  11964.  
  11965. @Indent_List@<:#245,9360><+!>STRING<-!>    The current users default transfer protocol letter (1 character max).
  11966.  
  11967. @Small_Header@<:#259,9360>Remarks
  11968.  
  11969. <:#1220,9360>This <+!>STRING<-!> is filled with information from the current users record when the 
  11970. <+!>GETUSER<-!> statement is executed.  It may then be changed and written back to the users record with the 
  11971. <+!>PUTUSER<-!> statement.  Note that it is empty until a <+!>GETUSER<-!> statement is processed and that changes are not written until a 
  11972. <+!>PUTUSER<-!> statement is processed.  Valid characters that may be used in the 
  11973. <+!>U_TRANS<-!></`>variable are A through Z and 0 through 9.
  11974.  
  11975. @Small_Header@<:#259,9360>Examples
  11976.  
  11977. @Example_Text@<:#810,9360>GETUSER<**>PRINTLN "Your default file transfer protocol letter is ",<+!>U_TRANS<-!><**>LET 
  11978. <+!>U_TRANS<-!> = "N" ' Set to no default protocol<**>PRINTLN "Default file transfer protocol letter set to None"<**>PUTUSER
  11979.  
  11980. @Small_Header@<:#259,9360>See Also
  11981.  
  11982. <:#240,9360><+!>GETUSER <+">Statement<-">, <-!><+!>PUTUSER <+">Statement<-"><-!><-"><-">
  11983.  
  11984. <:p<* >>
  11985.  
  11986. @Subhead@<:#360,9360>U_VER   <+">VARIABLE<-">
  11987.  
  11988. @Small_Header@<:#259,9360>Function
  11989.  
  11990. <:#240,9360>Allow reading and writing of the current users verification string.
  11991.  
  11992. @Small_Header@<:#259,9360>Type & Value
  11993.  
  11994. @Indent_List@<:#245,9360><+!>STRING<-!>    The current users verification string (25 characters max).
  11995.  
  11996. @Small_Header@<:#259,9360>Remarks
  11997.  
  11998. <:#1460,9360>This <+!>STRING<-!> is filled with information from the current users record when the 
  11999. <+!>GETUSER<-!> statement is executed.  It may then be changed and written back to the users record with the 
  12000. <+!>PUTUSER<-!> statement.  Note that it is empty until a <+!>GETUSER<-!> statement is processed and that changes are not written until a 
  12001. <+!>PUTUSER<-!> statement is processed.  Additionally, it will only have meaningful information if the verification PSA is installed.  The existence of the verification PSA may be checked with the 
  12002. <+!>PSA()<-!> function.
  12003.  
  12004. @Small_Header@<:#259,9360>Examples
  12005.  
  12006. @Example_Text@<:#1432,9360>STRING s<**>IF (PSA(2)) THEN<**>  GETUSER<**>  PRINTLN "Enter verification information"<**>  INPUT "",s<**>  IF (s <<<;> 
  12007. <+!>U_VER<-!>) HANGUP<**>ELSE<**>  PRINTLN "No verification information available"<**>ENDIF
  12008.  
  12009. @Small_Header@<:#259,9360>See Also
  12010.  
  12011. <:#240,9360><+!>GETUSER <+">Statement<-">, PSA() <+">Function<-">, PUTUSER <+">Statement<-"><-!><-"><-">
  12012.  
  12013. <:p<* >>
  12014.  
  12015. @Subhead@<:#360,9360>VALCC()   <+">Function<-">
  12016.  
  12017. @Small_Header@<:#259,9360>Function
  12018.  
  12019. <:#240,9360>Tests a string for credit card number format validity.
  12020.  
  12021. @Small_Header@<:#259,9360>Syntax
  12022.  
  12023. <:#202,9360><:f,QCourier,>VALCC(sexp)<:f>
  12024.  
  12025. @Indent_List@<:#240,9360>    <:f,QCourier,>sexp<:f>    Any string expression.
  12026.  
  12027. @Small_Header@<+@><:#259,9360>Return Type & Value
  12028.  
  12029. @Indent_List@<:#485,9360><+!>BOOLEAN<-!>    Returns <+!>TRUE<-!> if the string is a valid credit card number format, 
  12030. <+!>FALSE<-!> otherwise.
  12031.  
  12032. @Small_Header@<:#259,9360>Remarks
  12033.  
  12034. <:#725,9360>This function will take a string and attempt to identify it as a credit card number.  If the number is invalid for any reason (insufficient digits or bad checksum, primarily) then this function will return 
  12035. <+!>FALSE<-!>, otherwise it will return <+!>TRUE<-!>.
  12036.  
  12037. @Small_Header@<:#259,9360>Examples
  12038.  
  12039. @Example_Text@<:#958,9360>STRING s<**>WHILE (!<+!>VALCC(s)<-!>) DO<**>  INPUT "CC #",s<**>  NEWLINES 2<**>ENDWHILE<**>PRINTLN CCTYPE(s)," - ",FMTCC(s)
  12040.  
  12041. @Small_Header@<:#259,9360>See Also
  12042.  
  12043. <:#240,9360><-"><-"><-"><-"><+!>CCTYPE() <+">Function<-">, FMTCC() <+">Function<-">, VALDATE() 
  12044. <+">Function<-">, VALTIME() <+">Function<-"><-!>
  12045.  
  12046. <:p<* >>
  12047.  
  12048. @Subhead@<:#360,9360>VALDATE()   <+">Function<-">
  12049.  
  12050. @Small_Header@<:#259,9360>Function
  12051.  
  12052. <:#240,9360>Tests a string for date format validity.
  12053.  
  12054. @Small_Header@<:#259,9360>Syntax
  12055.  
  12056. <:#202,9360><:f,QCourier,>VALDATE(sexp)<:f>
  12057.  
  12058. @Indent_List@<:#240,9360>    <:f,QCourier,>sexp<:f>    Any string expression.
  12059.  
  12060. @Small_Header@<+@><:#259,9360>Return Type & Value
  12061.  
  12062. @Indent_List@<:#245,9360><+!>BOOLEAN<-!>    Returns <+!>TRUE<-!> if the string is a valid date format, 
  12063. <+!>FALSE<-!> otherwise.
  12064.  
  12065. @Small_Header@<:#259,9360>Remarks
  12066.  
  12067. <:#1695,9360>PPL does it best to convert incompatible types, as needed, automatically.  Converting a 
  12068. <+!>STRING<-!> type to a <+!>DATE<-!> type is particularly problematic because of the virtually unlimited numbers of strings possible.  This function checks to make sure that the hour is from 0 to 23, the minute is from 0 to 59, and the second (optional) is
  12069.  from 0 to 59.  Also, each field (hours/minutes/seconds) must be separated by a colon.  If the string matches these requirements then the string is considered valid and 
  12070. <+!>TRUE<-!></`>is returned.  Any other string will result in a <+!>FALSE<-!> value being returned.
  12071.  
  12072. @Small_Header@<:#259,9360>Examples
  12073.  
  12074. @Example_Text@<:#1274,9360>STRING s<**>WHILE (!<+!>VALTIME(s)<-!>) DO<**>  INPUT "Time",s<**>  NEWLINES 2<**>ENDWHILE<**>TIME t<**>LET t = s<**>PRINTLN s," ",t
  12075.  
  12076. @Small_Header@<:#259,9360>See Also
  12077.  
  12078. <:#240,9360><-"><-"><-"><-"><+!>VALCC() <+">Function<-">, VALDATE() <+">Function<-"><-!>
  12079.  
  12080. <:p<* >>
  12081.  
  12082. @Subhead@<:#360,9360>VALTIME()   <+">Function<-">
  12083.  
  12084. @Small_Header@<:#259,9360>Function
  12085.  
  12086. <:#240,9360>Tests a string for time format validity.
  12087.  
  12088. @Small_Header@<:#259,9360>Syntax
  12089.  
  12090. <:#202,9360><:f,QCourier,>VALTIME(sexp)<:f>
  12091.  
  12092. @Indent_List@<:#240,9360>    <:f,QCourier,>sexp<:f>    Any string expression.
  12093.  
  12094. @Small_Header@<+@><:#259,9360>Return Type & Value
  12095.  
  12096. @Indent_List@<:#245,9360><+!>BOOLEAN<-!>    Returns <+!>TRUE<-!> if the string is a valid time format, 
  12097. <+!>FALSE<-!> otherwise.
  12098.  
  12099. @Small_Header@<:#259,9360>Remarks
  12100.  
  12101. <:#1695,9360>PPL does it best to convert incompatible types, as needed, automatically.  Converting a 
  12102. <+!>STRING<-!> type to a <+!>TIME<-!> type is particularly problematic because of the virtually unlimited numbers of strings possible.  This function checks to make sure that the hour is from 0 to 23, the minute is from 0 to 59, and the second (optional) is
  12103.  from 0 to 59.  Also, each field (hours/minutes/seconds) must be separated by a colon.  If the string matches these requirements then the string is considered valid and 
  12104. <+!>TRUE<-!></`>is returned.  Any other string will result in a <+!>FALSE<-!> value being returned.
  12105.  
  12106. @Small_Header@<:#259,9360>Examples
  12107.  
  12108. @Example_Text@<:#1274,9360>STRING s<**>WHILE (!<+!>VALTIME(s)<-!>) DO<**>  INPUT "Time",s<**>  NEWLINES 2<**>ENDWHILE<**>TIME t<**>LET t = s<**>PRINTLN s," ",t
  12109.  
  12110. @Small_Header@<:#259,9360>See Also
  12111.  
  12112. <:#240,9360><-"><-"><-"><-"><+!>VALCC() <+">Function<-">, VALDATE() <+">Function<-"><-!>
  12113.  
  12114. <:p<* >>
  12115.  
  12116. @Subhead@<+@><:#360,9360>VARADDR   <+">Statement<-">
  12117.  
  12118. @Small_Header@<:#259,9360>Function
  12119.  
  12120. <:#240,9360>Sets a variable to the complete address of another variable.
  12121.  
  12122. @Small_Header@<:#259,9360>Syntax
  12123.  
  12124. <:#202,9360><:f,QCourier,>VARADDR src,dest<:f>
  12125.  
  12126. @Indent_List@<:#240,9360>    <:f,QCourier,>src<:f>    The variable to get the address of.
  12127.  
  12128. @Indent_List@<:#240,9360>    <:f,QCourier,>dest<:f>    The variable to store the address in.
  12129.  
  12130. @Small_Header@<:#259,9360>Remarks
  12131.  
  12132. <:#970,9360>This statement is primarily useful in conjunction with the <+!>DOINTR<-!> statement.  It may be necessary to give an interrupt the address of a memory location that can be used to store information.  This statement will allow you to get the address of a spe
  12133. cified variable to pass to the <+!>DOINTR<-!></`>statement.
  12134.  
  12135. @Small_Header@<:#259,9360>Examples
  12136.  
  12137. @Example_Text@<:#2370,9360>' Create subdirectory - DOS function 39h<**>INTEGER addr<**>STRING  path<**>LET path = "C:\$TMPDIR$"<+!><**>VARADDR path,addr<-!><**>DOINTR 21h,39h,0,0,addr%10000h,0,0,0,addr/10000h,0<**>IF (REGCF() & (REGAX() = 3)) THEN<**>  PRINTLN "Error:  Path not found
  12138. "<**>ELSE IF (REGCF() & (REGAX() = 5)) THEN<**>  PRINTLN "Error:  Access Denied"<**>ELSE IF (REGCF()) THEN<**>  PRINTLN "Error:  Unknown Error"<**>ELSE<**>  PRINTLN "Directory successfully created..."<**>ENDIF
  12139.  
  12140. @Small_Header@<:#259,9360>See Also
  12141.  
  12142. <:#240,9360><-"><-"><-"><-"><+!>MKADDR() <+">Function<-">, <-!><+!>VAROFF <+">Statement<-">, VARSEG 
  12143. <+">Statement<-"><-!>
  12144.  
  12145. <:p<* >>
  12146.  
  12147. @Subhead@<+@><:#360,9360>VAROFF   <+">Statement<-">
  12148.  
  12149. @Small_Header@<:#259,9360>Function
  12150.  
  12151. <:#240,9360>Sets a variable to the offset address of another variable.
  12152.  
  12153. @Small_Header@<:#259,9360>Syntax
  12154.  
  12155. <:#202,9360><:f,QCourier,>VAROFF src,dest<:f>
  12156.  
  12157. @Indent_List@<:#240,9360>    <:f,QCourier,>src<:f>    The variable to get the offset address of.
  12158.  
  12159. @Indent_List@<:#240,9360>    <:f,QCourier,>dest<:f>    The variable to store the offset address in.
  12160.  
  12161. @Small_Header@<:#259,9360>Remarks
  12162.  
  12163. <:#970,9360>This statement is primarily useful in conjunction with the <+!>DOINTR<-!> statement.  It may be necessary to give an interrupt the address of a memory location that can be used to store information.  This statement will allow you to get the offset address o
  12164. f a specified variable to pass to the <+!>DOINTR<-!></`>statement.
  12165.  
  12166. @Small_Header@<:#259,9360>Examples
  12167.  
  12168. @Example_Text@<:#2528,9360>' Create subdirectory - DOS function 39h<**>INTEGER saddr, oaddr<**>STRING  path<**>LET path = "C:\$TMPDIR$"<**>VARSEG path,saddr<+!><**>VAROFF path,oaddr<-!><**>DOINTR 21h,39h,0,0,oaddr,0,0,0,saddr,0<**>IF (REGCF() & (REGAX() = 3)) THEN<**>  PRINTLN "Error
  12169. :  Path not found"<**>ELSE IF (REGCF() & (REGAX() = 5)) THEN<**>  PRINTLN "Error:  Access Denied"<**>ELSE IF (REGCF()) THEN<**>  PRINTLN "Error:  Unknown Error"<**>ELSE<**>  PRINTLN "Directory successfully created..."<**>ENDIF
  12170.  
  12171. @Small_Header@<:#259,9360>See Also
  12172.  
  12173. <:#240,9360><-"><-"><+!>MKADDR() <+">Function<-">, <-!><+!>VARADDR <+">Statement<-">, VARSEG 
  12174. <+">Statement<-"><-!>
  12175.  
  12176. <:p<* >>
  12177.  
  12178. @Subhead@<+@><:#360,9360>VARSEG   <+">Statement<-">
  12179.  
  12180. @Small_Header@<:#259,9360>Function
  12181.  
  12182. <:#240,9360>Sets a variable to the segment address of another variable.
  12183.  
  12184. @Small_Header@<:#259,9360>Syntax
  12185.  
  12186. <:#202,9360><:f,QCourier,>VARSEG src,dest<:f>
  12187.  
  12188. @Indent_List@<:#240,9360>    <:f,QCourier,>src<:f>    The variable to get the segment address of.
  12189.  
  12190. @Indent_List@<:#240,9360>    <:f,QCourier,>dest<:f>    The variable to store the segment address in.
  12191.  
  12192. @Small_Header@<:#259,9360>Remarks
  12193.  
  12194. <:#970,9360>This statement is primarily useful in conjunction with the <+!>DOINTR<-!> statement.  It may be necessary to give an interrupt the address of a memory location that can be used to store information.  This statement will allow you to get the segment address 
  12195. of a specified variable to pass to the <+!>DOINTR<-!></`>statement.
  12196.  
  12197. @Small_Header@<:#259,9360>Examples
  12198.  
  12199. @Example_Text@<:#2528,9360>' Create subdirectory - DOS function 39h<**>INTEGER saddr, oaddr<**>STRING  path<**>LET path = "C:\$TMPDIR$"<+!><**>VARSEG path,saddr<-!><**>VAROFF path,oaddr<**>DOINTR 21h,39h,0,0,oaddr,0,0,0,saddr,0<**>IF (REGCF() & (REGAX() = 3)) THEN<**>  PRINTLN "Error
  12200. :  Path not found"<**>ELSE IF (REGCF() & (REGAX() = 5)) THEN<**>  PRINTLN "Error:  Access Denied"<**>ELSE IF (REGCF()) THEN<**>  PRINTLN "Error:  Unknown Error"<**>ELSE<**>  PRINTLN "Directory successfully created..."<**>ENDIF
  12201.  
  12202. @Small_Header@<:#259,9360>See Also
  12203.  
  12204. <:#240,9360><-"><+!>MKADDR() <+">Function<-">, VARADDR <+">Statement<-">, VAROFF 
  12205. <+">Statement<-"><-!>
  12206.  
  12207. <:p<* >>
  12208.  
  12209. @Subhead@<:#360,9360>VER()   <+">Function<-">
  12210.  
  12211. @Small_Header@<:#259,9360>Function
  12212.  
  12213. <:#240,9360>Get the version of PPL available.
  12214.  
  12215. @Small_Header@<:#259,9360>Syntax
  12216.  
  12217. <:#202,9360><:f,QCourier,>VER<:f><:f,QCourier,>(<:f><:f,QCourier,>)<:f>
  12218.  
  12219. @Indent_List@<:#240,9360>    No arguments are required
  12220.  
  12221. @Small_Header@<:#259,9360>Return Type & Value
  12222.  
  12223. @Indent_List@<:#245,9360><+!>INTEGER<-!>    Returns the version number of PPL running.
  12224.  
  12225. @Small_Header@<:#259,9360>Remarks
  12226.  
  12227. <:#1690,9360>As time passes, new features will be added to PCBoard and PPL.  Of course, in order to utilize the new features, you must be running a version of PCBoard that supports them.  This function will return the version of PCBoard (and PPL).  For PCBoard version 1
  12228. 5.0 this value will be 1500.  In other words, the major version will be accessable via 
  12229. <+!>VER()<-!>/100, and the minor version will be available via <+!>VER()<-!>%100.  Everything documented herein will be available for all versions greater than or equal to 1500.  Future PPL features will be documented with the required version.
  12230.  
  12231. @Small_Header@<:#259,9360>Examples
  12232.  
  12233. @Example_Text@<:#800,9360>IF (<+!>VER()<-!> << 1600) THEN<**>  PRINTLN "PCBoard Version 16.0 required for this PPE file"<**>  END<**>ENDIF<**>FOO a,b,c,d,e ' Obviously, this is not a 15.0 statement
  12234.  
  12235. @Small_Header@<:#259,9360>See Also
  12236.  
  12237. <:#240,9360><-"><-"><-">
  12238.  
  12239. <:p<* >>
  12240.  
  12241. @Subhead@<+@><:#360,9360>WAIT   <+">Statement<-">
  12242.  
  12243. @Small_Header@<:#259,9360>Function
  12244.  
  12245. <:#240,9360>Wait for the user to hit ENTER.
  12246.  
  12247. @Small_Header@<:#259,9360>Syntax
  12248.  
  12249. <:#202,9360><:f,QCourier,>WAIT<:f>
  12250.  
  12251. @Indent_List@<:#240,9360>    No arguments are required
  12252.  
  12253. @Small_Header@<:#259,9360>Remarks
  12254.  
  12255. <:#960,9360>It is often necessary to pause in the display of information and wait for the user to catch up.  This statement allows you to wait for the user to hit ENTER before continuing.  It displays prompt number 418 from the PCBTEXT file for the current language to 
  12256. let the user know what is expected.
  12257.  
  12258. @Small_Header@<:#259,9360>Examples
  12259.  
  12260. @Example_Text@<:#474,9360>PRINTLN "Your account has expired!"<**>PRINTLN "You are about to be logged off"<**><+!>WAIT<-!>
  12261.  
  12262. @Small_Header@<:#259,9360>See Also
  12263.  
  12264. <:#240,9360><+!>MORE <+">Statement<-"><-!>
  12265.  
  12266. <:p<* >>
  12267.  
  12268. @Subhead@<+@><:#360,9360>WAITFOR   <+">Statement<-">
  12269.  
  12270. @Small_Header@<:#259,9360>Function
  12271.  
  12272. <:#240,9360>Wait for a specific string of text to come in from the modem.
  12273.  
  12274. @Small_Header@<:#259,9360>Syntax
  12275.  
  12276. <:#202,9360><:f,QCourier,>WAITFOR str,flag,sec<:f>
  12277.  
  12278. @Indent_List@<:#240,9360>    <:f,QCourier,>str<:f>    Any string expression.
  12279.  
  12280. @Indent_List@<:#240,9360>    <:f,QCourier,>flag<:f>    A variable to return the status.
  12281.  
  12282. @Indent_List@<:#240,9360>    <:f,QCourier,>sec<:f>    An integer expression with the maximum number of seconds to wait.
  12283.  
  12284. @Small_Header@<:#259,9360>Remarks
  12285.  
  12286. <:#1700,9360>This statement can be used to wait for specific replies to questions, responses from terminal emulators and modem result codes.  If the text that is needed isn't received within the specified time period, or if there is not a remote caller online, flag will
  12287.  be set to <+!>FALSE<-!>.  If the text is found, then flag will be 
  12288. <+!>TRUE<-!>.  If a remote caller is online this statement will wait up to the maximum time for the text and return 
  12289. <+!>TRUE<-!> or <+!>FALSE<-!> as appropriate.  If the caller is local, it will immediately return 
  12290. <+!>FALSE<-!>.  Also, the text to wait for is not case sensitive.  "connect" will match "CONNECT".
  12291.  
  12292. @Small_Header@<:#259,9360>Examples
  12293.  
  12294. @Example_Text@<:#1738,9360>BOOLEAN flag<**>KBDCHKOFF<**>CDCHKOFF<**>DTROFF<**>DELAY 18<**>DTRON<**>SENDMODEM "ATDT5551212" ' Please don't really dial this number!<+!><**>WAITFOR "CONNECT",flag,60<-!><**>IF (!flag) SPRINLN "No connect found in 60 seconds"<**>CDCHKON<**>KBDCHKON
  12295.  
  12296. @Small_Header@<:#259,9360>See Also
  12297.  
  12298. <:#240,9360><-">
  12299.  
  12300. <:p<* >>
  12301.  
  12302. @Subhead@<+@><:#360,9360>WHILE/ENDWHILE   <+">Statement<-">
  12303.  
  12304. @Small_Header@<:#259,9360>Function
  12305.  
  12306. <:#240,9360>Execute one or more statments while a condition is true.
  12307.  
  12308. @Small_Header@<:#259,9360>Syntax
  12309.  
  12310. <:#1048,9360><:f,QCourier,>WHILE (bexp) statement<**><:f>-or-<**><:f,QCourier,>WHILE (bexp) DO<**>  statement(s)<**>ENDWHLLE<:f>
  12311.  
  12312. @Indent_List@<:#240,9360>    <:f,QCourier,>bexp<:f>    Any boolean expression.
  12313.  
  12314. @Indent_List@<:#240,9360>    <:f,QCourier,>statement<:f>    Any valid PPL statement.
  12315.  
  12316. @Small_Header@<:#259,9360>Remarks
  12317.  
  12318. <:#2670,9360>Computers are known for their ability to perform monotonous tasks quickly, efficiently, and accurately.  What better way to implement monotony than through a 
  12319. <+!>WHILE<-!> loop?  The <+!>WHILE<-!> statement supports two types of loops:  logical and block.  A logical 
  12320. <+!>WHILE<-!> loop is a single statement; if a condition is <+!>TRUE<-!>, execute a single statement and check again.  A block 
  12321. <+!>WHILE<-!> loop can be one or more statements.  The start of a block 
  12322. <+!>WHILE<-!> loop is differentiated from a logical <+!>WHILE<-!></`>loop by the 
  12323. <+!>DO<-!> keyword immediately after the condition.  At some point in the loop some action must be taken that will make the condition 
  12324. <+!>FALSE<-!>.  If the condition never changes from <+!>TRUE<-!> to 
  12325. <+!>FALSE<-!> you have what is known as an infinite loop; your computer will appear to be hung, even though it is rapidly executing things just as fast as it can.  Be sure to thoroughly test all programs, but especially programs with loops!
  12326.  
  12327. @Small_Header@<:#259,9360>Examples
  12328.  
  12329. @Example_Text@<:#2380,9360>INTEGER i<**>LET i = 0<+!><**>WHILE (i << 10)<-!> GOSUB sub<**>END<**>:sub<**>PRINTLN "i is ",i<**>INC i<**>RETURN<**><**>INTEGER i<**>LET i = 0<**><+!>WHILE (i << 10) DO<-!><**>  PRINTLN "i is ",i<**>  INC i<:f,QCourier,><+!><**>ENDWHILE<-!><:f>
  12330.  
  12331. @Small_Header@<:#259,9360>See Also
  12332.  
  12333. <:#240,9360><-"><-"><+!>FOR/NEXT <+">Statement<-">, IF/ELSEIF/ELSE/ENDIF <+">Statement<-"><-!>
  12334.  
  12335. <:p<* >>
  12336.  
  12337. @Subhead@<:#360,9360>WORDWRAP   <+">Constant<-">
  12338.  
  12339. @Small_Header@<:#259,9360>Function
  12340.  
  12341. <:#245,9360>Set the word wrap flag in an <+!>INPUTSTR<-!> or <+!>PROMPTSTR<-!> statement.
  12342.  
  12343. @Small_Header@<:#259,9360>Value
  12344.  
  12345. <:#240,9360>512 = 1000000000b = 1000o = 200h
  12346.  
  12347. @Small_Header@<:#259,9360>Remarks
  12348.  
  12349. <:#1455,9360>The <+!>INPUTSTR<-!> and <+!>PROMPTSTR<-!> statements have the ability to word wrap from one input statement to the next input statement.  If you reach the end of the input field PCBoard will automatically save the last word from the input field in an inter
  12350. nal buffer.  The next input statement will use that saved word if both statements used the 
  12351. <+!>WORDWRAP<-!> constant.  If the passed variable isn't empty or if an input statement is used that doesn't have the 
  12352. <+!>WORDWRAP<-!> flag set then the saved word will not be used.
  12353.  
  12354. @Small_Header@<:#259,9360>Examples
  12355.  
  12356. @Example_Text@<:#1590,9360>STRING  s(5)<**>INTEGER i<**>CLS<**>FOR i = 1 TO 5<**>  INPUTSTR "Line "+STRING(i),s(i),@X0E,40,MASK_ASCII(),<+!>WORDWRAP<-!>+NEWLINE<**>NEXT<**>CLS<**>FOR i = 1 TO 5<**>  PRINTLN "Line ",i,":  ",s(i)<**>NEXT
  12357.  
  12358. @Small_Header@<:#259,9360>See Also
  12359.  
  12360. <:#240,9360><-"><-"><-"><-"><+!>INPUTSTR <+">Statement<-">, <-!><-"><-"><+!>PROMPTSTR 
  12361. <+">Statement<-!><-"><-"><-"><-">
  12362.  
  12363. <:p<* >>
  12364.  
  12365. @Subhead@<+@><:#360,9360>WRUNET   <+">Statement<-">
  12366.  
  12367. @Small_Header@<:#259,9360>Function
  12368.  
  12369. <:#240,9360>Write information to the USERNET file for a specific node.
  12370.  
  12371. @Small_Header@<:#259,9360>Syntax
  12372.  
  12373. <:#202,9360><:f,QCourier,>WRUNET node,stat,name,city,oper,br<:f>
  12374.  
  12375. @Indent_List@<:#240,9360>    <:f,QCourier,>node<:f>    An integer expression with the node to update.
  12376.  
  12377. @Indent_List@<:#240,9360>    <:f,QCourier,>stat<:f>    A string expression with the new node status.
  12378.  
  12379. @Indent_List@<:#240,9360>    <:f,QCourier,>name<:f>    A string expression with the new node user name.
  12380.  
  12381. @Indent_List@<:#240,9360>    <:f,QCourier,>city<:f>    A string expression with the new node city.
  12382.  
  12383. @Indent_List@<:#240,9360>    <:f,QCourier,>oper<:f>    A string expression with the new node operation text.
  12384.  
  12385. @Indent_List@<:#240,9360>    <:f,QCourier,>br<:f>    A string expression with the new node broadcast text.
  12386.  
  12387. @Small_Header@<:#259,9360>Remarks
  12388.  
  12389. <:#1200,9360>To facilitate internode communications, a file named USERNET.XXX is maintained with an entry for each node on the system.  This file is used by the BROADCAST command of PCBoard and to prevent multiple simultaneous logins, among other things.  This statement
  12390.  may be used to change information for the current node (for example, to update operation text during PPE execution) or other nodes (for example, to broadcast a message).
  12391.  
  12392. @Small_Header@<:#259,9360>Examples
  12393.  
  12394. @Example_Text@<:#632,9360>RDUNET PCBNODE()<+!><**>WRUNET PCBNODE(),UN_STAT(),UN_NAME(),UN_CITY(),"Running "+PPENAME(),""<-!><**>RDUNET 1<**><+!>WRUNET 1,UN_STAT(),UN_NAME(),UN_CITY(),UN_OPER(),"Hello there node 1"<-!>
  12395.  
  12396. @Small_Header@<:#259,9360>See Also
  12397.  
  12398. <:#240,9360><+!>RDUNET<-!><+!><+"> Statement<-">, UN_...() <+">Function<-"><-!><-"><-">
  12399.  
  12400. <:p<* >>
  12401.  
  12402. @Subhead@<+@><:#360,9360>WRUSYS   <+">Statement<-">
  12403.  
  12404. @Small_Header@<:#259,9360>Function
  12405.  
  12406. <:#240,9360>Write a USERS.SYS file out to disk.
  12407.  
  12408. @Small_Header@<:#259,9360>Syntax
  12409.  
  12410. <:#202,9360><:f,QCourier,>WRUSYS<:f>
  12411.  
  12412. @Indent_List@<:#240,9360>    No arguments are required
  12413.  
  12414. @Small_Header@<:#259,9360>Remarks
  12415.  
  12416. <:#1450,9360>Some DOOR applications require a USERS.SYS file to access information about the caller.  This statement allows you to create that file prior to running an application via the 
  12417. <+!>SHELL<-!> statement.  Should the DOOR make changes to the USERS.SYS file, you should use the 
  12418. <+!>RDUSYS<-!> statement after the <+!>SHELL<-!> to read the changes back into memory.  It should be noted that it is not possible to create the USERS.SYS file with a TPA record with this statement.
  12419.  
  12420. @Small_Header@<:#259,9360>Examples
  12421.  
  12422. @Example_Text@<:#632,9360>INTEGER ret<**><+!>WRUSYS<-!><**>SHELL FALSE,ret,"MYAPP.EXE",""<**>RDUSYS
  12423.  
  12424. @Small_Header@<:#259,9360>See Also
  12425.  
  12426. <:#240,9360><+!>RDUSYS <+">Statement<-"><-!>
  12427.  
  12428. <:p<* >>
  12429.  
  12430. @Subhead@<:#360,9360>XOR()   <+">Function<-">
  12431.  
  12432. @Small_Header@<:#259,9360>Function
  12433.  
  12434. <:#240,9360>Calculate the bitwise XOR (exclusive or) of two integer arguments.
  12435.  
  12436. @Small_Header@<:#259,9360>Syntax
  12437.  
  12438. <:#202,9360><:f,QCourier,>AND(iexp1,iexp2)<:f>
  12439.  
  12440. @Indent_List@<:#240,9360>    <:f,QCourier,>iexp1<:f>    Any integer expression.
  12441.  
  12442. @Indent_List@<:#240,9360>    <:f,QCourier,>iexp2<:f>    Any integer expression.
  12443.  
  12444. @Small_Header@<+@><:#259,9360>Return Type & Value
  12445.  
  12446. @Indent_List@<:#245,9360><+!>INTEGER<-!>    Returns the bitwise XOR of iexp1 and iexp2.
  12447.  
  12448. @Small_Header@<:#259,9360>Remarks
  12449.  
  12450. <:#480,9360>This function may be used to toggle selected bits in an integer expression by XORing the expression with a mask that has the bits to toggle set to 1 and the bits to ignore set to 0.
  12451.  
  12452. @Small_Header@<:#259,9360>Examples
  12453.  
  12454. @Example_Text@<:#810,9360>' Toggle the bits in the low byte<**>PRINTLN <+!>XOR(1248h,00FFh)<-!><**>' Toggle a flag<**>INTEGER flag<**>LET flag = 
  12455. <+!>XOR(flag,1)<-!>
  12456.  
  12457. @Small_Header@<:#259,9360>See Also
  12458.  
  12459. <:#240,9360><+!>AND() <+">Function<-">, <-!><+!>NOT() <+">Function<-">, <-!><+!>OR() 
  12460. <+">Function<-"><-!><-"><-"><-">
  12461.  
  12462. <:p<* >>
  12463.  
  12464. @Subhead@<:#360,9360>YEAR()   <+">Function<-">
  12465.  
  12466. @Small_Header@<:#259,9360>Function
  12467.  
  12468. <:#240,9360>Extracts the year from a specified date.
  12469.  
  12470. @Small_Header@<:#259,9360>Syntax
  12471.  
  12472. <:#202,9360><:f,QCourier,>YEAR(dexp)<:f>
  12473.  
  12474. @Indent_List@<:#240,9360>    <:f,QCourier,>dexp<:f>    Any date expression.
  12475.  
  12476. @Small_Header@<+@><:#259,9360>Return Type & Value
  12477.  
  12478. @Indent_List@<:#485,9360><+!>INTEGER<-!>    Returns the year from the specified date expression (dexp).  Valid return values are from 1900 to 2079.
  12479.  
  12480. @Small_Header@<:#259,9360>Remarks
  12481.  
  12482. <:#485,9360>This function allows you to extract a particular piece of information about a 
  12483. <+!>DATE<-!> value, in this case the year of the date.
  12484.  
  12485. @Small_Header@<:#259,9360>Examples
  12486.  
  12487. @Example_Text@<:#168,9360>PRINTLN "This year is:  ",<+!>YEAR(DATE())<-!>
  12488.  
  12489. @Small_Header@<:#259,9360>See Also
  12490.  
  12491. <:#240,9360><+!>DAY() <+">Function<-">, <-!><+!>DOW() <+">Function<-">, <-!><+!>MONTH<+!>() 
  12492. <+">Function<-"><-"><-"><-">
  12493.  
  12494. <:p<* >>
  12495.  
  12496. @Subhead@<:#360,9360>YESCHAR()   <+">Function<-">
  12497.  
  12498. @Small_Header@<:#259,9360>Function
  12499.  
  12500. <:#240,9360>Get the yes response character for the current language.
  12501.  
  12502. @Small_Header@<:#259,9360>Syntax
  12503.  
  12504. <:#202,9360><:f,QCourier,>YESCHAR<:f><:f,QCourier,>(<:f><:f,QCourier,>)<:f>
  12505.  
  12506. @Indent_List@<:#240,9360>    No arguments are required
  12507.  
  12508. @Small_Header@<:#259,9360>Return Type & Value
  12509.  
  12510. @Indent_List@<:#245,9360><+!>STRING<-!>    Returns the yes character for the current language.
  12511.  
  12512. @Small_Header@<:#259,9360>Remarks
  12513.  
  12514. <:#720,9360>Support for foreign language yes/no responses can be easily added by using this function to determine what an affirmative response should be instead of hardcoding the english "Y" character.
  12515.  
  12516. @Small_Header@<:#259,9360>Examples
  12517.  
  12518. @Example_Text@<:#642,9360>STRING ans<**>LET ans = <+!>YESCHAR()<-!><**>INPUTSTR "Run program now",ans,@X0E,1,"",AUTO+YESNO<**>IF (ans = NOCHAR()) END
  12519.  
  12520. @Small_Header@<:#259,9360>See Also
  12521.  
  12522. <:#240,9360><-"><-"><+!>NOCHAR() <+">Function<-">, YESNO <+">Constant<-"><-!>
  12523.  
  12524. <:p<* >>
  12525.  
  12526. @Subhead@<:#360,9360>YESNO   <+">Constant<-">
  12527.  
  12528. @Small_Header@<:#259,9360>Function
  12529.  
  12530. <:#245,9360>Set the international yes/no response flag in an <+!>INPUTSTR<-!> or 
  12531. <+!>PROMPTSTR<-!> statement.
  12532.  
  12533. @Small_Header@<:#259,9360>Value
  12534.  
  12535. <:#240,9360>16384 = 100000000000000b = 40000o = 4000h
  12536.  
  12537. @Small_Header@<:#259,9360>Remarks
  12538.  
  12539. <:#1445,9360>The <+!>INPUTSTR<-!> and <+!>PROMPTSTR<-!> statements have the ability to allow a yes/no response to be entered in addition to any valid characters passed to the statement.  The extra characters allowed are Y/N (or whatever characters were defined for the c
  12540. urrent language; spanish would use S/N, french would use O/N, etc).  Note that you do not need to pass any valid characters to use this flag; regardless of the other legal characters the international Y/N characters will be allowed.
  12541.  
  12542. @Small_Header@<:#259,9360>Examples
  12543.  
  12544. @Example_Text@<:#642,9360>STRING ans<**>LET ans = NOCHAR()<**>INPUTSTR "Run program now",ans,@X0E,1,"",AUTO+<+!>YESNO<-!><**>IF (ans = NOCHAR()) END
  12545.  
  12546. @Small_Header@<:#259,9360>See Also
  12547.  
  12548. <:#476,9360><-"><-"><-"><-"><+!>INPUTSTR <+">Statement<-">, <-!><-"><-"><+!>NOCHAR() 
  12549. <+">Function<-">, <-!><+!>PROMPTSTR <+">Statement<-">, <-!><-"><-"><+!>YESCHAR() 
  12550. <+">Function<-!><-"><-"><-"><-">
  12551.  
  12552. <+!><+"><:p<* >><-!><-">
  12553.  
  12554. >
  12555.  
  12556. [Embedded]
  12557. 00470100
  12558.